프로그래머스

프로그래머스 - 두개 뽑아서 더하기 [Python]

SS_G 2023. 6. 11. 17:26
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/68644

 

프로그래머스

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

programmers.co.kr

안녕하세요! 오늘은 프로그래머스 '두 개 뽑아서 더하기' 문제에 대해 살펴보겠습니다. 이 문제는 파이썬의 기본 자료구조와 조합(Combination)에 대한 이해가 필요한 문제입니다.

 

문제 설명

이 문제는 주어진 숫자 배열에서 임의의 두 수를 선택하여 더하고, 그 결과를 오름차순으로 정렬하여 출력하는 문제입니다. 여기서 주의할 점은 중복된 수를 선택하여 더하는 것은 허용하지 않고, 중복된 결과는 하나로 취급한다는 점입니다.

 

문제 풀이

이 문제를 해결하려면 파이썬의 itertools라는 모듈을 활용하면 쉽게 해결할 수 있습니다. itertools 모듈은 파이썬에서 조합, 순열 등을 쉽게 다룰 수 있게 해주는 모듈입니다. 이 문제에서는 combinations 함수를 사용해 입력 배열에서 두 개를 선택하는 모든 조합을 구한 다음, 각 조합의 합을 계산합니다.

이후, 중복된 결과를 제거하기 위해 파이썬의 set 자료구조를 활용하고, 마지막으로 오름차순으로 정렬하기 위해 sorted 함수를 사용하면 됩니다.

 

Python 코드

from itertools import combinations

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

위 코드는 먼저 combinations 함수를 사용해 입력 배열에서 두 개를 선택하는 모든 조합을 구하고, 각 조합의 합을 계산하여 새로운 배열을 만듭니다. 그리고 set 자료구조를 통해 중복을 제거한 후, 다시 리스트로 변환합니다. 마지막으로 sort 함수를 호출하여 오름차순으로 정렬한 후 반환합니다.

 

[combinations 기본 사용법]

from itertools import combinations

combinations(iterable, r)

combinations 함수는 파이썬의 내장 모듈인 itertools에 포함되어 있는 함수입니다. 이 함수는 입력받은 반복 가능한 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 조합(Combination)을 반환합니다.

 

여기서 iterable은 반복 가능한 객체 (예: 리스트, 문자열 등), r은 뽑을 데이터의 개수입니다.

예를 들어, 다음과 같이 사용할 수 있습니다

from itertools import combinations

data = [1, 2, 3, 4, 5]
result = list(combinations(data, 2))

print(result)

위의 코드를 실행하면 다음과 같은 결과를 얻습니다

 

[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]

이처럼 combinations 함수를 사용하면 반복문을 사용하지 않고도 조합을 쉽게 구할 수 있습니다. 이 때, 주의해야 할 점은 combinations 함수가 반환하는 값은 generator라는 점입니다. generator는 값을 메모리에 저장하지 않고, 필요한 시점에 값을 생성하여 사용하는 특성이 있습니다. 따라서 list 함수를 사용하여 리스트로 변환해주어야 전체 조합을 한번에 볼 수 있습니다.

 

 

물론 combinations 함수를 사용하지 않고도 구현이 가능합니다.

그 방법은 중첩 for문을 사용하는 것입니다. 첫 번째 for문은 리스트의 첫 번째 요소부터 차례대로 접근하고, 두 번째 for문은 첫 번째 for문의 현재 인덱스 다음 요소부터 차례대로 접근합니다. 이렇게 하면 모든 요소 쌍에 대해 접근할 수 있습니다. 이 쌍을 더하고, 그 결과를 리스트에 추가합니다. 마지막으로 set 자료구조를 이용해 중복을 제거하고, sort() 함수를 이용해 오름차순으로 정렬합니다.

def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            answer.append(numbers[i] + numbers[j])
    answer = list(set(answer))
    answer.sort()
    return answer

 


이상으로 '두 개 뽑아서 더하기' 문제 풀이를 마치겠습니다. 이 문제는 파이썬의 내장 모듈과 자료구조를 활용하면 쉽게 해결할 수 있는 문제였습니다. 다음에도 이런 유형의 문제를 만나면 두렵지 않을 거라 생각합니다. 다음에 또 다른 문제로 만나요!

반응형