스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
종류 | 이름 |
---|---|
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
clothes | return |
---|---|
[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]] | 5 |
[["crowmask", "face"], ["bluesunglasses", "face"], ["smoky_makeup", "face"]] | 3 |
from itertools import combinations
def solution(clothes):
answer = []
kind=list(zip(*clothes))
for i in range(1, len(set(kind[-1]))+1):
for k in list(combinations(kind[-1],i)):
if len(k)==len(set(k)):
answer.append(k)
return len(answer)
def solution(clothes):
answer=1
kind=list(zip(*clothes))
result={i:0 for i in list(set(kind[1]))}
for i in kind[1]:
result[i]+=1
for i in result.values():
answer=answer*(i+1)
return answer-1
def solution(clothes):
from collections import Counter
from functools import reduce
cnt = Counter([kind for name, kind in clothes])
answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
return answer
def solution(clothes):
clothes_type = {}
for c, t in clothes:
if t not in clothes_type:
clothes_type[t] = 2
else:
clothes_type[t] += 1
cnt = 1
for num in clothes_type.values():
cnt *= num
return cnt - 1
그나마 제일 Hash와 가깝게 접근한 것 같다!
수학을 잘하면 진짜 접근법이 다른 것 같다...!
출처: 프로그래머스
오류가 있으면 댓글 달아주세요🙂