본문 바로가기

3. 알고리즘/프로그래머스

[python] 13. 두 개 뽑아서 더하기

728x90

문제 설명

정수 배열 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]

 


나의 코드

from itertools import combinations
import collections

def solution(n):
    ls = list(combinations(n, 2))  #numbers의 조합을 구한다.
    dic = collections.Counter([u+v for u, v in ls])  #조합들의 합의 유니크한 값을 구한다.
    result = list(dic.keys())
    result.sort()  #오름차순으로 정렬을 한다.
    return result

1. itertools 라이브러리의 combinations함수를 사용해 numbers의 조합을 구했다.

2. 조합의 합들의 unique한 값들을 만들기 위해 collections.Counter함수를 사용했다.

모듈을 불러와서 함수를 사용하긴 했지만,

가끔 모듈을 불러오는 것을 제한하는 곳이 있다고 들은 것 같고 또 다른 방법으로도 충분히 풀 수 있기 때문에 좋은 답안은 아닌 듯 하다.

 

다른 풀이

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

unique한 값들을 구하고 싶으면 set을 사용하자! 하지만 반드시 list를 써서 리스트형태로 변환시켜주자.

 

 

 

728x90