스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
종류 이름
얼굴 동그란 안경, 검정 선글라스
상의 파란색 티셔츠
하의 청바지
겉옷 긴 코트
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
clothes return
[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]] 5
[["crowmask", "face"], ["bluesunglasses", "face"], ["smoky_makeup", "face"]] 3
예제 #1
headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다.
1. yellow_hat
2. blue_sunglasses
3. green_turban
4. yellow_hat + blue_sunglasses
5. green_turban + blue_sunglasses
예제 #2
face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다.
1. crow_mask
2. blue_sunglasses
3. smoky_makeup
우선 이 문제에서는 의상의 이름은 사실 중요하지 않다. 각 의상의 종류가 몇개씩 있는지만 파악하면 해결할 수 있다. 만약 모자 2개, 상의 1개라고 하면 경우는 5가지로 나타낼 수 있다.
모자 x 상의 1
모자 1 상의 x
모자 1 상의 1
모자 2 상의 x
모자 2 상의 1
이를 통해서 나는 (모자의 개수+1)\*(상의의 개수+1)-1
이라는 식을 구할 수 있었다. 이제 clothes라는 배열을 의상 종류 이름: 개수
로 나타내면 모든 경우의 수를 쉽게 구할 수 있다. 이를 위해서 딕셔너리를 공부하다가 배웠던 defaultdict()를 이용했다. defaultdict()는 조회의 경우 주어진 key값에 해당하는 value가 없을 경우에 value에 기본값을 넣어 바로 생성해주는 딕셔너리이다. 파이썬 3부터 지원되는 점을 기억해야 한다. defaultdict()에 key를 의상 종류 이름으로 설정하고 value를 개수로 설정하여 clothes 배열을 딕셔너리로 변경한다. 그리고 도출된 딕셔너리의 value에 1을 더한 값을 모두 곱하고 마지막에 1을 빼주면 해결할 수 있다.
의상 종류 이름: 개수
의 형태로 저장할 딕셔너리 c_list를 defaultdict()로 정의한다. defaultdict()의 인자로 int를 넣어 기본 값이 0이 되도록 한다.from collections import defaultdict
def solution(clothes):
answer = 1
c_list=defaultdict(int)
for i, j in clothes:
c_list[j]+=1
for i, j in c_list.items():
answer*=(j+1)
answer-=1
return answer
오늘도 좋은하루~ 심심하면 준찌닷컴? 궁금하면 ㄱㄱ🔞
https://junjjijji.com/