728x90
반응형
SMALL
✏️ 문제
문제 파악
각 의상들은 입는 방법이 2가지로 나뉜다.
- 입는다.
- 안입는다.
하지만 코니는 최소 한 개의 이상을 입으므로 전부 안입는 경우는 치지 않으므로 마지막 결과값에 -1을 해주어야 한다.
예시 1번을 보면
headgear
1. 두 개 다 안쓴다.
2. yellow_hat 쓰고 green_turban 안쓴다.
3. green_turban 쓰고 yellow_hat 안쓴다.
eyewear
1. 안쓴다.
2. blue_sunglasses 쓴다
경우의 수는 해당 의상의 종류 + 1(안쓴다) 인 것으로 알 수 있다.
그리고 우리가 구하는 조합의 수는 3(headgear의 경우의 수) * 2(eyewear의 경우의 수) - 1(아무것도 안입는 경우) = 5 이다.
이 계산식을 근거로 코드를 짜면 된다.
코드
from collections import defaultdict
def solution(clothes):
answer = 1
dic = defaultdict(int)
for c in clothes:
dic[c[1]] += 1
for count in dic.values():
answer *= (count + 1)
return answer - 1
- 다른 사람의 코드
def solution(clothes):
clothes_type = {}
for c, t in clothes:
if t not in clothes_type:
clothes_type[t] = 2
else:
clothes_type[t] += 1
cnt = 1
for num in clothes_type.values():
cnt *= num
return cnt - 1
이 분의 코드가 더 간단해 보이는데 해석하면 다음과 같다.
clothes_type에 처음 넣으면(not in)
1. 입는다. 2. 안입는다. 로 두 가지의 경우의 수가 나오므로 2를 넣고
clothes_type에 이미 다른 옷이 있으면(in) (예를 들어 넣어서 2개가 된다면)
1. 1번째 옷을 입는다. 2. 2번째 옷을 입는다. 3. 둘다 안입는다. 로 세 가지 경우의 수가 나오므로 +1을 한다.
728x90
반응형
LIST
'PS > 프로그래머스' 카테고리의 다른 글
[Python] 피로도 (0) | 2024.12.10 |
---|---|
[Python] 프로세스 (0) | 2024.12.10 |
[Python] n^2 배열 자르기 (0) | 2024.12.09 |
[Python] 카펫 (1) | 2024.11.08 |
[Python] 영어 끝말잇기 (0) | 2024.11.08 |