Coding Test/Python

[프로그래머스] 의상 (level2, python)

lim.dev 2024. 1. 10. 19:45

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

아이디어

  • 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.
  • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
  • 코니는 하루에 최소 한 개의 의상은 입습니다.

본문을 보면 위와 같이 적어도 하나는 입어야하지만, 네 가지 종류를 모두 입을 필요는 없다고 합니다.

 

그러면 전체 경우의 수는

(입을 수 있는 얼굴 종류의 수 + 1) * (입을 수 있는 상의 수 + 1) * (입을 수 있는 하의 수 + 1) * (입을 수 있는 겉옷 수 + 1) - 1 이 됩니다.

각 종류에서 +1을 하는 이유안입을 경우도 생각하기 위함이고, 마지막에 -1을 하는 이유적어도 하나는 입어야 하기 때문에 모두 안입을 경우를 빼주기 위함입니다.

 

전체 코드

from collections import defaultdict

def solution(clothes):
    d = defaultdict(int)
    for v, k in clothes: d[k] += 1

    answer = 1
    for v in d.values(): answer *= (v+1)
    return answer - 1

 

* defaultdict를 사용하면 없는 key가 없을 경우 자동으로 0에 +1을 해주게 됩니다.