Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

김찬양의 개발일지

31일차. 두 개 뽑아서 더하기 본문

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

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