코딩테스트 연습 - 두 개 뽑아서 더하기 | 프로그래머스 스쿨 (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() 결과는 리스트로 나오기 때문)
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv.1] 덧칠하기 (Python) (0) | 2024.08.02 |
---|---|
[프로그래머스 Lv.1] 가장 가까운 같은 글자 (Python) (0) | 2024.07.17 |
[프로그래머스 Lv.1] K번째 수 (Python) (0) | 2024.07.16 |
[프로그래머스 Lv.1] 이상한 문자 만들기 (Python) +split()함수 (1) | 2024.07.16 |
[프로그래머스 Lv.1] 명예의 전당(1) (Python) (0) | 2024.07.12 |