def solution(clothes):
dic = {}
for i in clothes :
if i[1] in dic :
dic[i[1]] += 1
else :
dic[i[1]] = 2
answer = 1
for j in dic.values() :
answer *= j
return answer -1
풀이
의상 종류를 세어 경우의 수를 구해주면 된다.
1. dic에 의상 종류에 따라 저장하고 해당 종류가 또 있다면 1을 더해준다.
2. dic에 저장된 의상 종류들의 모든 값(수)들을 곱하고 -1하여 반환한다.
* 2부터 시작하고 -1하는 이유 :
의상종류가 3가지라고 가정했을 때, (a + 1)(b + 1)(c + 1) - 1 = (a + b + c) + (ab + bc + ca) + abc
다른 풀이
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
1. Counter 함수로 데이터의 개수(의상 종류)를 센다.
- Counter는 데이터의 개수를 구할때 사용한다.
- ex) 테스트케이스 1번을 돌려보면 cnt = Counter({'headgear': 2, 'eyewear': 1})
2. reduce 함수를 이용해 cnt의 values 값들에 +1을 더하여 곱한다음 -1을 해준다.
- functools 내장 모듈 reduce() 함수는 여러개의 데이터를 대상으로 누적 집계를 내기 위해 이용한다.
- reduce(집계 함수, 순회 가능한 데이터[, 초기값])
- 기본적으로 초기값을 기준으로 데이터를 루프 돌면서 집계 함수를 계속해서 적용하면서 데이터를 누적하는 방식으로 작동한다.
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 큰 수 만들기 (0) | 2021.06.06 |
---|---|
[Python] 다리를 지나는 트럭 (0) | 2021.06.04 |
[Python] 메뉴 리뉴얼 (0) | 2021.06.02 |
[Python] 뉴스 클러스터링 (0) | 2021.05.28 |
[Python] 소수 찾기 (0) | 2021.05.27 |