코테 노트/프로그래머스

Level 2 위장 Python 3

화요밍 2021. 7. 8. 01:11
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/42578?language=python3 

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

최종 코드

 

hwayeon351/Programmers-Algorithms

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

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
반응형