Stay Hungry Stay Foolish

프로그래머스 코딩테스트/Level 1

Programmers 두 개 뽑아서 더하기 (Python/Level 1)

dev스카이 2022. 7. 6. 17:41

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명

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

 


문제 설명

입출력 예 #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 해야 합니다.

문제 풀이

  1. combinations을 사용하기 위해 itertools 라이브러리를 import한다. 
  2. combinations(iterable, r) : 순서가 있고, 중복이 없는 모든 경우의 수를 나열한다. dataset(iterable)에서 2개를 뽑아 리스트를 만들어준다.
  3. numbers에는 [(2,1), (2,3), (2,4), (2,1), (1,3), (1,4)...]와 같이 저장이 된다.
  4. 반복문으로 [(2+1), (2+3), (2+4), .... ] 각 요소를 더하기 위해 append를 사용해 answer 리스트에 저장한다.
  5. set으로 중복된 값을 제거하고 sorted로 정렬한 리스트를 반환한다.

Solution

from itertools import combinations
def solution(numbers):
    answer = []
    numbers = list(combinations(numbers,2)) 
    for a,b in numbers:
        answer.append(a+b)
    return sorted(list(set(answer)))

set함수를 사용하면 저절로 정렬이 된다고 알고 있었는데, 문제 제출 시 다른 테스트 케이스에서 오류가 발생하기 때문에 정렬 함수도 적어줘야 한다.