프로그래머스 LV1 두개 뽑아서 더하기

프로그래머스 LV1 두개 뽑아서 더하기

2021, Mar 30    

프로그래머스 lv1 두개 뽑아서 더하기 파이썬

서로 다른 인덱스에 있는 두개의 수를 뽑는다는 말을 보자마자 ‘조합’combinations를 떠올려야 했다.

파이썬 기본 라이브러리인 itertools에서 combinations라는 내장함수를 사용하여 인자값에 따라 해당 요소로 구할 수 있는 모든 조합을 리턴한다.


풀이

from itertools import combinations
def solution(numbers):
    answer = set()
    for i in list(combinations(numbers,2)):
        answer.add(sum(i))
    return sorted(answer)

풀이2

from itertools import combinations
def solution(numbers):
    return sorted(list(set([sum([i,j]) for i,j in combinations(numbers,2)])))

1.numbers 리스트에서 2개를 뽑아서, 2.더한 후에 3.리스트로 정리하여 4.set() 함수로 중복을 없앤다. 그리고 5.sorted를 이용해서 정렬해주면 끝


함수 정리

  • set() 함수는 순서 상관없이 집합으로 만들어주며 중복값을 자동으로 제거한다.
# set 생성자에 iterable한 객체를 넣으면 변환하여 set을 만들어 줍니다.
# 물론 set생성자 없이 바로 중괄호 안에 값을 넣어도 됩니다.
>>> s = set([1,3,5,7])
>>> s
{1, 3, 5, 7}
>>> p = {1, 3, 5, 7}
>>> p
{1, 3, 5, 7}

# 중복된 값은 자동으로 중복이 제거 됩니다.
>>> s = {1, 5, 1, 1, 1, 3, 7}
>>> s
{1, 3, 5, 7}

  • python combinations 바로가기

  • itertools.combinations(iterable, r)

    • 입력 iterable에서 요소의 길이 r 서브 시퀀스들을 반환한다.
    • 조합(combination) 튜플은 입력 iterable의 순서에 따라 사전식 순서로 방출된다. 따라서, 입력 iterable이 정렬되어있으면, 조합 튜플이 정렬된 순서로 생성된다..
    • 요소는 값이 아니라 위치로 고유성을 다룬다. 따라서 입력 요소가 고유하면, 각 조합에 반복 값이 없다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges