코딩테스트/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))