NIRVANA

[level 1]두 개 뽑아서 더하기 본문

Coding test(Python3)/Programmers

[level 1]두 개 뽑아서 더하기

녜잉 2023. 7. 29. 23:03

문제

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

 

 

문제 풀이 접근법1

1) 자기 자신을 제외한 다른 원소들과 더한 값을 answer에 추가한다.

2) 중복을 제거하기 위해 answer를 set으로 형변환했다가 다시 list로 변환한다.

def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(len(numbers)):
        
            if i !=j:
                answer.append(numbers[i]+numbers[j])
    return list(set(answer))

샘플 테스트 케이스 4, 5번에서 오류가 났다. 

찾아보니까 정렬을 하지 않아서 그런 것 같았다. 

*set을 하는데도 오류가 난 이유가 테스트 케이스에서 음수를 주기도 해서 그런거라고!

 

문제 풀이 접근법2

정렬을 추가했다. 

def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(len(numbers)):
        
            if i !=j:
                answer.append(numbers[i]+numbers[j])
    return sorted(list(set(answer)))

 

 


다른 분들 풀이

def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            answer.append(numbers[i] + numbers[j])
    return sorted(list(set(answer)))

나도 처음에 i+1을 생각했었는데 그러면 i이전의 값은 못더하는 게 아닌가? 

싶어서 그냥 i랑 j를 똑같이 반복했는데

어차피 이전 값은 이미 전에 더했으니까....상관이 없는거였다...ㅋㅋㅋㅋ심지어 중복 허용도 안하니까 더더욱 상관이 없는거였다..ㅋㅋㅋㅋㅋㅋ

 

from itertools import combinations

def solution(numbers):
    answer = []
    l = list(combinations(numbers, 2))

    for i in l:
        answer.append(i[0]+i[1])
    answer = list(set(answer))
    answer.sort()

    return answer

와 콤비네이션! 이번에도 생각도 못했다. 

진짜 꼭 다음번에는 생각해보고 사용해야지. 

 

그래도 이번에 저번에 문제 풀면서 배웠던 set함수를 잘 활용한 것 같아서 뿌듯...^~^