코딩테스트 연습 - 두 개 뽑아서 더하기
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한
programmers.co.kr

1) 문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
2) 제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
3) 입출력 예

입출력 예 #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 해야 합니다.
입출력 예 #2
- 2 = 0 + 2 입니다.
- 5 = 5 + 0 입니다.
- 7 = 0 + 7 = 5 + 2 입니다.
- 9 = 2 + 7 입니다.
- 12 = 5 + 7 입니다.
- 따라서 [2,5,7,9,12] 를 return 해야 합니다.
1. 문제 접근방식
하나의 숫자를 기준으로 나머지 숫자를 다 더하는 방식으로 값을 구한다.
→ 이렇게 코드를 구현하고 싶었지만 구현하지 못해서,, 결국 다른 풀이를 찾아보았다!
그리고 중복을 제거해주기 위해 set()을 사용한다.
마지막으로 정렬을 위해 sort()를 사용한다.
2. 풀이 코드
def solution(numbers):
answer = set() # 중복을 제거하기 위해 answer를 set()으로 설정
for i in range(len(numbers)): # 처음 가져오는 수 i
for j in range(i+1, len(numbers)): # i 이후의 수를 j로 가져옴
answer.add(numbers[i]+numbers[j]) # answer가 set이기에 append가 아닌 add
answer = list(answer) # set인 answer를 list로 변경
answer.sort() # answer를 오름차순으로 정렬
return answer
answer를 리스트가 아닌 set()으로 설정을 하여 중복을 제거해준다.
그리고 i는 처음 가져오는 수로 numbers의 수만큼 for 반복문을 사용하여 가져온다.
i 이후의 수는 j로 가져오는데, range에 시작 숫자, 종료 숫자를 기재하면 된다.
그리고 수를 더한 것을 answer에 add해준 후 answer를 리스트로 변경하고 오름차순으로 정렬시킨다.
▼ 참고한 코드 블로그 ▼
[프로그래머스] 두 개 뽑아서 더하기 (Python)
[프로그래머스, 월간 코드 챌린지 시즌1] 두 개 뽑아서 더하기
velog.io
def solution(numbers):
answer = []
hap = []
for i in range(len(numbers)):
for j in range(len(numbers)):
if i != j:
hap.append(numbers[i] + numbers[j])
answer = list(set(hap))
answer.sort()
return answer
해당 코드는 같이 공부하는 다른 분의 코드를 들고 왔다.
i와 j의 범위를 동일하게 지정을 하고, i와 j가 다를 때, 둘의 인덱스 값을 더한 것을 hap이라는 리스트에 추가해준다.
그리고 hap을 set()으로 변경하여 중복값을 없애준 후 list로 변환한 것을 answer로 지정한다.
마지막으로 sort()함수로 오름차순으로 정렬해준다.
3. 배운 점
range : range(시작숫자, 종료숫자, step)의 형태로 리스트 슬라이싱과 유사하다.
19. for in 반복문, Range, enumerate
## 1. for in 반복문 - 여타 다른 언어에서는 일반적인 for문, foreach문, for of문등 여러가지 방식을 한꺼번에 지원하는 경우가 많습니다. - Pyt ...
wikidocs.net
나는 range를 range(len(list))이런 식으로만 사용을 했어서 위와 같이 시작 숫자를 지정할 수 있는지 모르고 있었다.
그런데 이렇게 지정할 수 있다는 것을 알게 되어서 이것을 적극 활용해도 좋을 것 같다!
'코딩 테스트 > Python' 카테고리의 다른 글
[백준 코딩테스트(Python)] 반복문 - 5. 빠른 A+B (0) | 2022.08.11 |
---|---|
[프로그래머스 코딩테스트 연습] 22. 하샤드 수 (0) | 2022.03.22 |
[프로그래머스 코딩테스트 연습] 19. 문자열 내 마음대로 정렬하기 (0) | 2022.03.20 |
[프로그래머스 코딩테스트 연습] 17. 자릿수 더하기 (0) | 2022.03.18 |
[프로그래머스 코딩테스트 연습] 16. 2016년 (0) | 2022.03.17 |