데이터분석 기록일지

문제풀이/프로그래머스

[프로그래머스 Lv.1] 두 개 뽑아서 더하기 (Python)

야하루 2024. 7. 16. 18:20

코딩테스트 연습 - 두 개 뽑아서 더하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

 

 

제한사항

numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.

 

 

입출력 예
numbers result
[2, 1, 3, 4, 1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

 

 

 


풀이

 

아이디어: combination(조합)을 사용하여 2개씩 뽑아주고 더한 뒤, 집합으로 바꿔주어서 중복을 제거해 준다.
(집합은 중복된 원소를 가지지 않기 때문)
from itertools import combinations

def solution(numbers):
    comb = list(combinations(numbers,2))
    result = [sum(x) for x in comb]
    result = list(set(result))
    result.sort()
    return result

from itertools import combinations을 통해서 combination 함수를 불러온다.

 

 

 

☞ 더 간단한 풀이

from itertools import combinations

def solution(numbers):
    return sorted(set(map(sum,combinations(numbers,2))))

굳이 여러줄에 걸쳐서 적지 않고, 한번에 연산해주었다.

 

map으로 조합으로 나온 숫자들을 sum 함수로 합 해준다.

이후 set()으로 집합으로 바꾸어서 중복을 제거해 주고, sorted()를 하면서 오름차순과 동시에 리스트로 변환해준다.

(sorted() 결과는 리스트로 나오기 때문)