[문제풀이] 두 개 뽑아서 더하기

HKoiKoi·2026년 9월 17일

코딩 테스트

목록 보기
3/13
post-thumbnail

문제

두 개 뽑아서 더하기

문제 설명

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


제한사항

  • 2≤numbers의 길이≤1002 \leq \text{numbers의 길이} \leq 100
  • 0≤numbers의 모든 수≤1000 \leq \text{numbers의 모든 수} \leq 100

입출력 예시

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

문제 풀이

index0 1 2 3 4
data2 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

ijnumbers[i]numbers[j]numbers[i] + numbers[j]
01213
02235
03246
04213
12134
13145
14112
23347
24314
34415

이중 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))

0개의 댓글