나의 풀이
from collections import Counter
from functools import reduce
def solution(clothes):
tmp=[]
for x, y in clothes:
tmp.append(y)
#요소별 개수를 파악함
tmp_set=Counter(tmp)
#요소에 대한 value값만 저장함
tmp_value=tmp_set.values()
#tmp_value의 모든 요소에 1을 더함
tmp_value_plus = list(map(lambda value: value+1, tmp_value))
#tmp_value_plus에 있는 모든 요소를 곱한다.
tmp_total=reduce(lambda x,y : x*y, tmp_value_plus)
#아무 것도 안 입는 경우를 1개 뺀다.
return tmp_total -1
문제풀이 설명
머리 3, 상의 2, 하의 1개 조합이면 23개의 경우의 수가 나와야 한다.
머리: 머리1, 머리2, 머리3
상의: 상의1, 상의2
하의: 하의1
하나만 입었을 때: 6개
머리1
머리2
머리3
상의1
상의2
하의1
2개 조합: 11개
머리1, 상의1
머리1, 상의2
머리2, 상의1
머리2, 상의2
머리3, 상의1
머리3, 상의2
머리1, 하의1
머리2, 하의1
머리3, 하의1
상의1, 하의1
상의2, 하의1
3개 조합: 6개
머리1, 상의1, 하의1
머리2, 상의1, 하의1
머리3, 상의1, 하의1
머리1, 상의2, 하의1
머리2, 상의2, 하의1
머리3, 상의2, 하의1
(3[머리]+1) * (2[상의]+1) * (1[하의]+1) - 1[안입을때] = 23개의 조합이 나온다.
a,b,c 가 부위 별이라고 할때 일반화 하면 다음과 같다.
(a + 1)(b + 1)(c + 1) - 1 = (a + b + c) + (ab + bc + ca) + abc
(a + b + c) : 부위별 1개씩 입는 경우
(ab + bc + ca) : 부위별 2개씩 조합해서 입는 경우
abc : 부위별 3개씩 조합해서 입는 경우
▶ 부위별 요소의 개수 파악하기 위해서 Counter함수를 사용하였다.
▶ 리스트의 요소를 전부 곱하기 위하여 reduce()를 사용하였다.
▶ 모든 요소에 전부 1씩 더하기 위하여 다음과 같은 람다식을 사용하였다.
tmp_value_plus = list(map(lambda value: value+1, tmp_value))
'프로그래머스(파이썬) > LV.2(파이썬)' 카테고리의 다른 글
기능 개발→ deque, 이중 while문★, 미친 for문★, 갱신★ (0) | 2022.12.27 |
---|---|
튜플→Counter, 정규식, most_common(), split()★★ (0) | 2022.12.27 |
괄호 회전하기★★→ rotate() 사용O + rotate() 사용X 문자열 밀기 (0) | 2022.12.27 |
행렬의 곱셈★★★→3중 for문 (0) | 2022.12.26 |
1차 캐시→체크리스트X, OrderedDict()★★ (0) | 2022.12.26 |