728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42578
VERSION 2.0
import collections
import itertools
def solution(clothes):
b = collections.Counter(list(map(lambda x : x[1] , clothes)))
answer = 1
for i in list(b.values()):
answer *= i+1
return answer -1
==> eyewear : 2 , headgear : 1
==> answer*= (2+1) -> answer *= (1+1)
VERSION 1.0
from collections import Counter
from functools import reduce
def solution(clothes):
# 1. 의상 종류별 Counter를 만든다.
counter = Counter([type for clothe, type in clothes])
print(counter)
# 2. zip 함수를 통하여 counter 값 구할수도 있다.
print("애스터리스크 : {}".format(*clothes))
print("애스터리스크 with zip: {}".format(list(zip(*clothes))))
counter_2 = Counter(list(zip(*clothes))[1])
print(counter_2)
# 3. 모든 종류의 count + 1을 누적하여 곱해준다
answer = reduce(lambda acc, cur: acc*(cur+1), counter_2.values() , 1) - 1
#acc 매개변수에는 counter_2의 value 값들 , cur 매개변수에는 1을
#reduce 함수는 반복 가능한 객체 내 각 요소를 연산한 뒤 이전 연산 결과들과 누적해서 반환해 주는 함수이다.
#counter_2.values()에는 ==> 2, 1 ==> 2*(1+1) + 1*(1+1) - 1 = 5
#ex) target = [i for i in range(1,22)]
# answer = reduce(lambda x, y : x+y , target) ==> 1+2 +3 + 4 + 5 +..... ==> 누적값 반환
return answer
1. *clothes ==> 애스터리스크로 list안의 list들 빼온다.
2. zip()함수를 통해 ==> list안의 값들 요소에 맞게 정리
3.reduce 함수는 누적해서 곱하는 함수
4. 누적함수를 쓰는 이유는
계산한 count를 통해서 (count+1)를 곱해주고 마지막에 1을 빼줌
- 1을 빼주는 이유는 모두 안입은 경우를 제거
728x90
반응형
'Python(프로그래머스) > 해시' 카테고리의 다른 글
★VER5.0★해시★Collections.Counter★완주하지 못한 선수[프로그래머스] (0) | 2023.06.18 |
---|---|
★VER5.0★해시★Collections.Counter★폰켓몬[프로그래머스] (0) | 2023.06.18 |
VER3.0★문자열 리스트(정수형) 정렬할땐 맨앞에꺼 숫자에 따라 정렬된다.★리스트 시작★zip★startswith★전화번호목록[프로그래머스] (0) | 2023.05.29 |
★VER2.0★베스트엘범[프로그래머스] (0) | 2023.01.02 |
★zip★items★directory append★베스트엘범[프로그래머스] (0) | 2022.11.17 |