문제 설명
정수 배열 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 해야 합니다.
문제 풀이
- combinations을 사용하기 위해 itertools 라이브러리를 import한다.
- combinations(iterable, r) : 순서가 있고, 중복이 없는 모든 경우의 수를 나열한다. dataset(iterable)에서 2개를 뽑아 리스트를 만들어준다.
- numbers에는 [(2,1), (2,3), (2,4), (2,1), (1,3), (1,4)...]와 같이 저장이 된다.
- 반복문으로 [(2+1), (2+3), (2+4), .... ] 각 요소를 더하기 위해 append를 사용해 answer 리스트에 저장한다.
- 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함수를 사용하면 저절로 정렬이 된다고 알고 있었는데, 문제 제출 시 다른 테스트 케이스에서 오류가 발생하기 때문에 정렬 함수도 적어줘야 한다.
'프로그래머스 코딩테스트 > Level 1' 카테고리의 다른 글
Programmers 약수의 개수와 덧셈 (Python/Level 1) (0) | 2022.07.27 |
---|---|
Programmers 2016년 (Python/Level 1) (0) | 2022.07.26 |
Programmers K번째수 (Python/Level 1) (0) | 2022.07.25 |
Programmers 나머지가 1이 되는 수 찾기 (Python/Level 1) (0) | 2022.07.24 |
Programmers 나누어 떨어지는 숫자 배열 (Python/Level 1) (0) | 2022.07.22 |