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을 해주게 됩니다.
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스] 같은 숫자는 싫어 (level1, pyhton) (0) | 2024.01.11 |
---|---|
[프로그래머스] 베스트앨범 (level3, python) (0) | 2024.01.10 |
[프로그래머스] 전화번호 목록(level2, python) (0) | 2024.01.10 |
[프로그래머스] 폰켓몬(level1, python) (0) | 2024.01.10 |
[프로그래머스] 완주하지 못한 선수 (level1, python) (0) | 2024.01.10 |