나의 풀이
def solution(clothes):
clothes_hash = {}
count = 1
for _, i in clothes :
if i in clothes_hash :
clothes_hash[i] += 1
else :
clothes_hash[i] = 2
for i in clothes_hash.values():
count *= i
return count - 1
옷의 종류를 key 로 생각하여 해시 테이블을 생성한다.
조합을 구할 때는 (옷 종류별 개수 + 1) 끼리 곱해주면 된다.
옷 종류별로 하나의 옷만 입을 수 있기 때문에 개수가 경우의 수가 되고,
1을 더하는 이유는 옷을 안 입는 경우도 더해야 하기 때문이다.
그리고 전체 경우의수에서 -1을 해야 옷을 하나도 안 입는 경우를 빼야 한다.
다른 풀이
Counter
collections 모듈
리스트나 딕셔너리 안에 존재하는 원소의 개수를 세서 딕셔너리 자료형으로 반환한다. {'A':4}
reduce
functools 내장 모듈, 데이터에 집계 함수를 반복해서 계산해줌
reduce(집계 함수, 순회 가능한 데이터[, 초기값])
첫번째 인자는 accumulator, 두번째 인자는 현재값(current value)
from collections import Counter
from functools import reduce
def solution(clothes):
cnt = Counter([kind for name, kind in clothes])
answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
return answer
[kind for name, kind in clothes] -> clothes 배열의 0번째 인덱스를 name, 1번째 인덱스를 kind 라 할 때
kind(종류) 에 대한 데이터들의 개수를 구하는 식이다.
그리고 reduce 함수를 통해 옷 종류 개수 + 1를 곱해나간다.
'알고리즘 > 해시' 카테고리의 다른 글
[프로그래머스] 폰켓몬 - 파이썬(python) (0) | 2022.09.01 |
---|---|
[프로그래머스] 베스트앨범 - 파이썬(python) (0) | 2022.05.06 |
[프로그래머스] 전화번호 목록 - 파이썬(python) (0) | 2022.05.05 |
[프로그래머스] 완주하지 못한 선수 - 파이썬(python) (0) | 2022.05.05 |
댓글