코딩테스트/Programmers Level 1
31일차. 두 개 뽑아서 더하기
자유로운영혼이다냥
2023. 12. 25. 22:30
링크
https://school.programmers.co.kr/learn/courses/30/lessons/68644
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
정답
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))