
정수 배열 numbers가 주어집니다.
numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return하도록 solution 함수를 완성해주세요.
| numbers | result |
|---|---|
| [2,1,3,4,1] | [2,3,4,5,6,7] |
| [5,0,2,7] | [2,5,7,9,12] |
| index | 0 1 2 3 4 |
| data | 2 1 3 4 1 |
2 + 1 = 3
2 + 3 = 5
2 + 4 = 6
2 + 1 = 3
1 + 3 = 4
1 + 4 = 5
1 + 1 = 2
3 + 4 = 7
3 + 1 = 4
4 + 1 = 5
-> 2, 3, 4, 5, 6, 7
인덱스
i = 0 ~ 3
j = i + 1 ~ 최대index
| i | j | numbers[i] | numbers[j] | numbers[i] + numbers[j] |
|---|---|---|---|---|
| 0 | 1 | 2 | 1 | 3 |
| 0 | 2 | 2 | 3 | 5 |
| 0 | 3 | 2 | 4 | 6 |
| 0 | 4 | 2 | 1 | 3 |
| 1 | 2 | 1 | 3 | 4 |
| 1 | 3 | 1 | 4 | 5 |
| 1 | 4 | 1 | 1 | 2 |
| 2 | 3 | 3 | 4 | 7 |
| 2 | 4 | 3 | 1 | 4 |
| 3 | 4 | 4 | 1 | 5 |
이중 for문을 통해 리스트를 만들고
set을 통해 중복 제거 후 정렬하고 반환하면 된다!
def solution(numbers):
answer = []
length = len(numbers)
for i in range(length - 1):
for j in range(i + 1, length):
answer.append(numbers[i] + numbers[j])
answer = list(set(answer))
answer.sort()
return answer
이렇게 작성해서 제출하여 통과했다!!
제한 길이가 런타임 아웃될 정도는 되지 않아 그냥 통과했다.
제출 후 다른 사람들의 풀이를 봤는데 대부분은 나와 비슷했고
리스트 컴프리헨션과 itertools를 쓴 사람들이 있어서 신선했다.
# 리스트 컴프리헨션
def solution(numbers):
answer = [numbers[i] + numbers[j] for i in range(len(numbers) - 1) for j in range(i + 1, len(numbers))]
return sorted(set(answer))
from itertools import combinations
def solution(numbers):
answer = [sum(comb) for comb in combinations(numbers, 2)]
return sorted(set(answer))