(의상 종류의 개수 1)을 모두 곱한 후 -1(아무것도 안 입었을 경우 제외) 하면 답을 구할 수 있으므로
먼저 첫 for 문을 통하여 clothes 배열에 있는 의상 종류의 개수를 세어주고
두 번째 for 문을 통하여 의상 조합의 개수를 구해주었다.
def solution(clothes):
answer = {}
for i in clothes:
if i[1] in answer:
answer[i[1]] += 1
else:
answer[i[1]] = 1
cnt = 1
for i in answer.values():
print(i)
cnt *= (i + 1)
return cnt-1
개념은 동일 하지만 코드를 collections, functools 모듈을 사용하여 더 단순하게 작성하였다.
Counter를 사용하여 kind for name, kind in clothes 를 하게 되면
clothes의 요소 안의 두 번째 요소인 옷의 종류가 반환되고
그것들을 Count 해주게 된다. 그 후 lambda 함수를 사용하여 cnt 한 값들에 대하여
1 한 값을 곱하고 마지막으로 reduce 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
파이썬에서는 lambda를 사용하여 함수를 보다 간결하게 작성 할 수 있다.
def add(x,y)
return x+y
(lambda x,y: x + y)(10, 20)
map(), reduce(), filter() 등을 같이 사용하면 여러 가지 동작들을 수행할 수 있다.
#map(함수,리스트)
print(*map(lambda x: x**2,range(5)))
#range(5)의 숫자들을 lambda 함수 x**2에 넣어 출력
#즉 0~4까지의 숫자들의 제곱을 출력
#0 1 4 9 16
#reduce(함수,시퀀스,초기값)
from functools import reduce
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
#[0,1,2,3,4]의 숫자들을 누적하여 lambda 함수에 적용한다 초기값을 설정하면 그것부터 시작.
#0+1=1 -> 1+2=3 -> 3+3=6 -> 6+4=10
#결과는 10
reduce(lambda x, y: y + x, 'abcde')
#b+a=ba -> c+ba=cba -> d+cba=dcba -> e+dcba=edcba
#결과는 edcba
#filter(함수,리스트)
list(filter(lambda x: x % 2, range(10)))
#0~9까지중 x%2 해서 참,즉 1보다 큰 수가 나오는,
#2로 나누었을때 나머지가 1인 홀수들을 출력하게 된다.
#map을 사용하면 리스트의 숫자들이 변한 값이 나오고
#filter를 사용하면 리스트의 숫자들이 그대로 나온다.
print(*filter(lambda x: x%2==0, range(10)))
#짝수를 출력하는 방법