
문제
https://school.programmers.co.kr/learn/courses/30/lessons/68644
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- 정수 배열 numbers가 주어질 때,
numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 반환 - 제한사항)
numbers의 길이는 2 이상 100 이하
numbers의 모든 수는 0 이상 100 이하
정답 코드 (개선 필요)
def solution(numbers):
n = len(numbers)
answer = []
for i in range(n-1):
for j in range(i+1, n):
plus = numbers[i] + numbers[j]
if plus not in answer:
answer.append(plus)
return sorted(answer)
코드 설명
1. 이중 반복문으로 서로 다른 두 수 조합하기
for i in range(n - 1):
for j in range(i + 1, n):
- 서로 다른 인덱스를 뽑기 위해 i는 0부터 시작, j는 i보다 하나 큰 값부터 시작 (중복 없는 조합 가능)
2. 중복되지 않으면 리스트에 추가
if plus not in answer:
answer.append(plus)
- 리스트 answer에 이미 같은 합이 들어 있는지 확인 → 없으면 추가
- 리스트에서 중복 체크할 때 in을 쓰면 성능 문제 발생 (개선점)
3. 오름차순 정렬해서 반환
return sorted(answer)
개선된 코드 (set() 사용)
def solution(numbers):
answer = set()
for i in range(len(numbers) - 1):
for j in range(i + 1, len(numbers)):
answer.add(numbers[i] + numbers[j])
return sorted(answer)
코드 설명
1. set()
answer = set()
- 중복 없이 값을 저장할 수 있도록 집합(set)을 생성 (같은 값이 들어오면 자동으로 하나만 유지)
2. add()

3. sorted()
- 집합(set), 딕셔너리(dict), 문자열(str), 튜플(tuple) 등 여러 종류의 반복 가능한 객체(iterable)를 받아서,
정렬된 리스트(list)로 반환 - set은 순서를 유지하지 않기 때문에, 정렬하려면 꼭 sorted()가 필요
한 줄 코드
def solution(numbers):
return sorted({numbers[i] + numbers[j] for i in range(len(numbers)) for j in range(i + 1, len(numbers))})'코딩 테스트 연습 > [프로그래머스] Python' 카테고리의 다른 글
| [LV.3] 연습문제 > 푸드 파이트 대회 (0) | 2025.07.15 |
|---|---|
| [LV.3] 연습문제 > 가장 가까운 같은 글자 ⭐️ (1) | 2025.07.11 |
| [LV.3] 정렬 > K번째수 (1) | 2025.07.09 |
| [LV.3] 연습문제 > 문자열 내 마음대로 정렬하기 ⭐️ (1) | 2025.07.08 |
| [LV.3] 숫자 문자열과 영단어 ⭐ (0) | 2025.07.07 |