Slow is better than NOTHING

Programmers 풀이/[LEVEL 1]

[Python] 프로그래머스 - 두 개 뽑아서 더하기

Jeff_Kang 2020. 12. 13. 18:35
반응형

- 문제 설명

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

- 입출력 예

numbers results
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

주어진 숫자 List에서 "서로 다른 인덱스" 에 있는 두 수를 뽑아 더해 만들 수 있는 숫자를 구하는 문제입니다.
이 문제에서 주목할 점은 1) 서로 다른 인덱스에서 추출, 2) 오름차순, 3) 중복 허용하지 않음 입니다.

"중복허용하지 않음"을 알게 된 것은, 문제 상에서 설명되지 않았지만 results에서도 중복이 없으며 만들 수 있는 모든 수라는 내용에서 3을 만들 수 있는 방법이 2개라면 3하나만 출력하면 된다고 생각했기 때문입니다. 따라서, 예제 2번 [5,0,2,7] 리스트에서 숫자 7을 만들 수 있는 방법은 "5+2" or "0+7" 두 가지 이지만 result list에는 7 만 들어가면 됩니다.

따라서, 단순 순차 탐색으로 코드 구현이 가능합니다.
또는 파이썬에서 제공하는 combinations 메서드를 활용해 주어진 리스트에서 2개의 숫자를 구할 수 있는 조합을 이용하여 구현할 수 도 있습니다.

아래는 정답 코드입니다.

더보기
def solution(numbers):
    # 단순 순차 탐색
    empty_list=[]
    for index, num in enumerate(numbers):
        num_list = numbers[index+1:]
        for sub_num in num_list:
            empty_list.append(sub_num+numbers[index])
    
    answer = sorted(list(set(empty_list)))
    return answer
from itertools import combinations
def solution(numbers):
    # combination 활용
    combination_list = list(combinations(numbers,2))
    empty_list=[]
    for i in combination_list:
        empty_list.append(i[0]+i[1])
    answer = sorted(list(set(empty_list)))
    return answer
반응형