[프로그래머스] 의상

단간단간·2024년 4월 18일

알고리즘 문제

목록 보기
72/106

문제 링크:

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

회고:

  • 결국 홀딱 벗는 경우를 제외한 모든 가능한한 조합의 수를 구하면 되는 것
  • 예를 들어, headgear 종류가 2개이고 eyewear 종류가 1개라고 한다면 계산은 (2 + 1) X (1 + 1) - 1 = 5가 된다. 풀어서 써보면 아래와 같다.
    • (2 + 1): headgear만 생각했을때 가능한한 조합의 수는 headgear 종류의 개수에 아무것도 선택하지 않는 것 까지 고려해서 3가지 경우의 수가 나온다.
    • (1 + 1): eyewear도 마찬가지로 생각하면, eyewear 개수 + 아무것도 선택하지 않는 것 까지 고려해서 2가지 경우의 수가 나온다.
    • -1: 위 둘을 곱하게 되면, 모든 가능한한 경우의 수가 나오는데 여기에는 headgear와 eyewear 그 무엇도 선택하지 않는 경우의 수가 포함되어 있으므로 최종 결과에서 -1 해줌으로써 벌거 벗는 경우를 제외해주는 것이다.

python

from collections import defaultdict


def solution(clothes):
    clothes_count = defaultdict(int)

    for _, cloth_type in clothes:
        clothes_count[cloth_type] += 1

    combination_count = 1
    for value in clothes_count.values():
        combination_count *= value + 1

    return combination_count - 1


if __name__ == "__main__":
    result = solution([["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]])
    print(result)
5
profile
simple is best

0개의 댓글