본문 바로가기

자료구조 & 알고리즘 & cs/CodingTest

프로그래머스 LEVEL1 - 두 개 뽑아서 더하기

▶ 문제 설명

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

▶ 제한사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

▶ 입출력 예

numbers                                                                            result

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

▶ 내가 짠 코드

import itertools

def solution(numbers):
    answer = []
    com =itertools.combinations(numbers,2)
    
    comList = list(com)
    for i in range(len(comList)):
        answer.append(sum(comList[i]))
    return sorted(list(set(answer)))

combination을 이용해 중복하지 않는 조합 가능한 모든 수를 조합한다.

튜플 형식으로 반환하므로 리스트로 형식을 변환한 후 순회하며 각 수들의 합을 더해 answer에 append한다. 

이 때, 수는 중복되지 않고 오름차순으로 담아야 하므로

 set과 list 변환 그리고 sorted를 사용한다. 

▶ 참고사항

다른 사람의 풀이를 참고해보았는데

from itertools import combinations
def solution(numbers):
    return sorted(set(sum(i) for i in list(combinations(numbers, 2))))

역시 combinations을 사용하였는데 코드를 정리하여 간단하게 한 줄에 끝냈다.

728x90