스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
종류 | 이름 |
---|---|
얼굴 | 동그란 안경,검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
clothes |
---|
[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]] |
[["crowmask", "face"], ["bluesunglasses", "face"], ["smoky_makeup", "face"]] |
headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다.
face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다.
from collections import Counter
def solution(clothes):
c = Counter([a for _, a in clothes])
cnt = 1
for key in c:
cnt *= (c[key] + 1)
return cnt - 1
reduce
를 함수를 나중에 알게되어 사용해봤는데 나중에 더 공부해봐야겠다...
reduce(집계 함수, 순회 가능한 데이터[, 초기값])
from collections import Counter
from functools import reduce
def solution(clothes):
c = Counter([a for _, a in clothes])
answer = reduce(lambda x, y: x*(y+1), c.values(),1)-1
return answer
프로그래머스는 다른 사람의 코드를 보는 재미가 있다.
같은 모듈 같은 함수를 썻는데 이렇게까지 줄일 수 있다니ㅠㅠ
import collections
from functools import reduce
def solution(c):
return reduce(lambda x,y:x*y,[a+1 for a in collections.Counter([x[1] for x in c]).values()])-1