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

SMongS·2022년 5월 19일
0

CodingTest

목록 보기
9/49
post-custom-banner

문제

설명

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

제한사항

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

입출력 예

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

입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12] 를 return 해야 합니다.

코드

from itertools import combinations

def solution(numbers):
    arr = []
    for i in combinations(numbers, 2):
        arr.append(sum(i))
    
    return sorted(list(set(arr)), reverse=False)

itertools 라이브러리를 사용했습니다.

itertools는 효율적인 루핑을 위한 이터레이터를 만드는 라이브러리입니다.

몇 가지 있는데,
이번엔 combinations라고 원소 개수가 n개인 조합을 뽑는 함수입니다.

combinations(배열, 조합할 원소 수)

for i in combinations(numbers, 2):
	print(i)
-----------------------------------
(2, 1)
(2, 3)
(2, 4)
(2, 1)
(1, 3)
(1, 4)
(1, 1)
(3, 4)
(3, 1)
(4, 1)

조합해서 나온 수들을 합해서 arr 배열에 추가합니다.

중복을 제거해야 하기에 set()을 사용했지만, set()의 경우 사용하면 순서가 섞이기에 sorted()를 사용했고, 오름차순으로 해야하기에 reverse를 false로 주었습니다.

profile
반갑습니당~😄
post-custom-banner

0개의 댓글