김찬양의 개발일지
31일차. 두 개 뽑아서 더하기 본문
링크
https://school.programmers.co.kr/learn/courses/30/lessons/68644
문제
정답
def solution(numbers):
answer = set()
for i, x in enumerate(numbers):
for y in numbers[i+1:]:
answer.add(x+y)
return list(sorted(answer))
풀이과정
numbers 리스트 내부의 원소끼리 모두 더해보는 방법은 시간복잡도 O(n^2)로 상당히 비효율적이지만, 제한 길이가 100이므로 간단하게 모두 더해보도록 하자.
가장 먼저 numbers의 원소를 앞에서부터 하나씩 뽑는다.
for i, x in enumerate(numbers):
이후, 각 원소마다 그 원소 이후를 기준으로 슬라이스해서 각각 순회를 돌린다.
for y in numbers[i+1:]:
이렇게하는 이유는, 현재의 x보다 앞에잇는 숫자는 한번씩 모두 더해봣기떄문이기도 하면서, 자기자신을 제외하기 위해서이다.
그리고 그 합을 set에 add하여 중복을 제거한다.
answer = set()
answer.add(x+y)
이 결과물을 오름차순으로 정렬하고, 리스트로 변환시켜 되돌려주면 된다.
return list(sorted(answer))
'코딩테스트 > Programmers Level 1' 카테고리의 다른 글
33일차. K번째수 (0) | 2023.12.28 |
---|---|
32일차. [카카오 인턴] 키패드 누르기 (0) | 2023.12.26 |
30일차. 3진법 뒤집기 (0) | 2023.12.24 |
29일차. 내적 (0) | 2023.12.24 |
28일차. 신규 아이디 추천 (2) | 2023.12.22 |