[프로그래머스 42578 파이썬] 위장 (level 2, 해시)

배코딩·2022년 2월 10일
0

PS(프로그래머스)

목록 보기
3/36

알고리즘 유형 : 해시
풀이 참고 없이 스스로 풀었나요? : O

https://programmers.co.kr/learn/courses/30/lessons/42578




SOLVE 1

딕셔너리 풀이

def solution(clothes):
    answer = 1
    clothes_dict = {}
    
    for cloth in clothes:
        cloth_type = cloth[1]
        if cloth_type in clothes_dict:
            clothes_dict[cloth_type] += 1
        else:
            clothes_dict[cloth_type] = 2
    
    for v in clothes_dict.values():
        answer *= v
    
    return answer - 1


SOLVE 2

Counter 모듈 풀이

from collections import Counter

def solution(clothes):
    answer = 1
    
    cloth_type = Counter([t for _, t in clothes])
    for v in cloth_type.values():
        answer *= (v+1)
    
    return answer - 1



풀이 요약

  1. 특정 종류의 의상이 n개라면, 아예 안 끼는 경우부터 1번째, 2번째, ..., n번째 의상을 착용하는 경우까지 총 n+1가지가 있고, 모든 종류의 의상에 대해 총 경우의 수는 이런 식으로 n+1들의 곱에서 1을 빼준 것이다. 1은 모든 종류의 의상을 동시에 아무 것도 입지 않는 경우를 빼주는 것이다.

  1. 종류의 개수만을 알면 되므로, 각 의상 종류별로 개수를 구하는 것이 핵심이다. 딕셔너리에 저장해도 되고, list comprehension을 통해 의상 종류만을 따로 빼낸 리스트에 대해 Counter 모듈로 딕셔너리를 만들어도 된다.





배운 점, 어려웠던 점

  • 이런 문제에 Counter 모듈이 제 격이라는 것을 깨달았다. 앞으로 적극 활용해야겠다.
profile
PS, 풀스택, 앱 개발, 각종 프로젝트 내용 정리 (https://github.com/minsu-cnu)

0개의 댓글