Today I Learned/Python

[데린이의 TIL] 프로그래머스 Python 문제: 두 개 뽑아서 더하기

듀랑이 2020. 12. 11. 16:10

프로그래머스 파이썬 Level 1. 두 개 뽑아서 더하기

💡 프로그래머스 파이썬 연습문제:
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

 

출처 : 프로그래머스

그러니까 문제는 그림에서 왼쪽에 있는 각 리스트 안의 숫자들을 두 개씩 조합해서 더한 오른쪽의 새로운 리스트를

중복없이 오름차순으로 변경하라는 것. 이 세 가지 조건을 꼭 반영해야 한다.

 

완성한 코드

from itertools import combinations

def solution(numbers):
    answer = set()
    hap = list(combinations(numbers,2))
    
    for i in hap:
        answer.add(sum(i))
    return sorted(list(answer))

 

itertools의 combinations 활용하기

파이썬 라이브러리인 itertools의 combinations를 활용하면 리스트 안의 원소값들을 묶어주는데, 예시는 아래와 같다

permutations는 중복 상관 없이 모든 조합을 만들고

combinations는 중복 없는 조합을 만든다

위에 코드에서 동일하게 hap이라는 list를 만들어줬고, 이를 for문에서 각각 불러와서 sum 해주었다.

numbers = [1,2,3]

from itertools import permutations
list(numbers, 2)
결과: [(1,2), (1,3), (2,1), (2,3), (3,1), (3,2)]

from itertools import combinations
list(numbers, 2)
결과: [(1,2), (1,3), (2,3)]

 

Set 활용하기

list와 다르게 set은 중복을 허락하지 않는다. 따라서 sum을 통해서 도출된 새로운 원소들을 set에 더해주도록 했다.

(list는 append지만 set은 add!)

 

정렬하기

sorted( )를 활용해 정렬해주었다. 만약 내림차순으로 하려면 sorted(numbers, reverse= True)로 해주면 된다고 한다.