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
이상으로 '두 개 뽑아서 더하기' 문제 풀이를 마치겠습니다. 이 문제는 파이썬의 내장 모듈과 자료구조를 활용하면 쉽게 해결할 수 있는 문제였습니다. 다음에도 이런 유형의 문제를 만나면 두렵지 않을 거라 생각합니다. 다음에 또 다른 문제로 만나요!
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 푸드 파이트 대회 [Python] (0) | 2023.06.12 |
---|---|
프로그래머스 - K번째수 [Python] (0) | 2023.06.12 |
프로그래머스 - 시저 암호 [Python] (0) | 2023.06.10 |
프로그래머스 - 삼총사 [Python] (1) | 2023.06.09 |
프로그래머스 - 문자열 내 마음대로 정렬하기 [Python] (0) | 2023.06.09 |