728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42578?language=python3
최종 코드
from collections import Counter
from functools import reduce
def solution(clothes):
kinds = Counter(list(zip(*clothes))[1]).values()
return reduce(lambda x, y:x*(y+1), kinds, 1)-1
풀이 과정
1. Counter, reduce 활용
from collections import Counter
from functools import reduce
def solution(clothes):
#1. 각 의상 종류별 개수를 구한다. -> clothes의 1번 인덱스를 key값으로 Counter에 넣어주면 카운팅된다.
#2. 의상 종류별 개수 리스트를 kinds에 저장한다. -> 1.의 Counter에 values()함수를 통해 value들을 리스트로 반환한다.
kinds = Counter(list(zip(*clothes))[1]).values()
#3. 스파이는 최소 한 개의 의상을 입기 때문에, 각 의상 종류별 개수에 안 입는 경우 1을 더한 값을 곱하고 아무것도 입지 않는 경우인 1을 빼주면 된다.
#reduce의 세번째 매개변수를 1로 하여 초기값을 설정한다.
return reduce(lambda x, y:x*(y+1), kinds, 1)-1
2. Counter, for문 활용
from collections import Counter
def solution(clothes):
#1. 의상 종류별 개수를 구한다.
kind = list(Counter([k for c, k in clothes]).values())
#2. 의상 종류가 하나인 경우, 같은 종류는 하나만 착용할 수 있으므로 해당 종류의 의상 개수를 출력한다.
if len(kind)==1:
return kind[0]
#3. 의상 종류가 둘 이상인 경우,
else:
#answer을 1로 초기화 한다.
answer = 1
#의상 종류별 개수에 안 입는 경우 1을 더해주고 각 경우를 answer에 곱해준다.
for k in kind:
answer*=(k+1)
#스파이는 하루에 최소 한 개의 의상을 입기 때문에, answer에서 아예 안 입는 경우 1을 빼준 값을 return한다.
return answer-1
#시간복잡도 = O(n) 공간복잡도 = O(n)
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 2 더 맵게 Python3 (0) | 2021.07.08 |
---|---|
Level 3 베스트 앨범 Python3 (0) | 2021.07.08 |
Level 2 전화번호 목록 Python3 (0) | 2021.07.07 |
Level 1 완주하지 못한 선수 Python3 (0) | 2021.07.06 |
Level 2 주식가격 Python3 (0) | 2021.07.05 |