문제 출처 https://programmers.co.kr/learn/courses/30/lessons/42578
문제 설명
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
제한사항
clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
같은 이름을 가진 의상은 존재하지 않습니다.
clothes의 모든 원소는 문자열로 이루어져 있습니다.
모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
스파이는 하루에 최소 한 개의 의상은 입습니다.
휴 40분 걸렸다
수학문제에 더 가까운 것 같은 문제.
의상카테고리가 하나일 때는 그 카테고리에 있는 개수를 출력하기만 하면 되지만
카테고리의 개수가 3개 이상으로 점점 늘어날수록 한 카테고리의 의상은 아예 선택하지 않는 경우까지 고려해야하다보니 구현을 어떻게 해야할지 통 감이 안와서 시간이 많이 걸렸다.
딕셔너리랑 각 카테고리별 요소 개수를 저장하는 리스트구현까지는 성공했는데
그 이후에 답을 얻어내는 과정을 모르겠어서 결국 답을 치팅했다.
(요소개수 + 1) 의 모든 곱이라니..
치팅하고 나서 공식으로 풀어보니까 위와 같이 기가막히게 똑같이 나왔다.
그래도 딕셔너리 밸류에 리스트를 넣는 등 테크니컬적인 부분에서는 공부가 됐다.
def solution(clothes):
from collections import defaultdict
d = defaultdict(list)
def multi(arr):
ans = 1
for i in arr:
ans *= (i+1)
return ans
for i in range(len(clothes)):
d[clothes[i][1]] += [clothes[i][0]]
lengths = [len(v) for v in d.values()]
if len(lengths)==1:
return lengths[0]
else: return (multi(lengths) -1)
'Computer > PS' 카테고리의 다른 글
[프로그래머스] 레벨2 프린터(스택/큐) <=> 백준 1966번 : 프린터 큐 - 파이썬 python any함수 (0) | 2020.11.15 |
---|---|
[프로그래머스] 레벨2 124 나라의 숫자 (0) | 2020.11.15 |
[프로그래머스] 레벨2 올바른 괄호- 파이썬 python (0) | 2020.11.13 |
[프로그래머스] 레벨2 오픈채팅방 - 파이썬 python (0) | 2020.11.13 |
백준 python 1699번 : 제곱수의 합 (0) | 2020.11.13 |