728x90
📌 풀이
약간의 수학적 사고를 해야 풀리는 문제이다.
우선 나는 딕셔너리의 성격과 수학의 경우의 수를 조합하여 문제를 풀었다.
우선 옷의 종류에 따라 몇 가지가 있는지 파악한다.
answer = {}
for cloth in clothes:
if cloth[1] in answer:
answer[cloth[1]] += 1
else:
answer[cloth[1]] = 1
...
colthes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]
라면
answer = {'headgear': 2, 'eyewear': 1}
이제 각 옷의 종류의 개수를 알았으니 경우의 수를 이용하여 푼다.
이전에 입을 수 있는 옷의 경우의 수를 구하는 문제를 풀었던 기억이 있을 것이다.
여기서 그러한 문제와 한가지 다른 것은 옷의 각 경우에 옷을 입지 않는 X의 경우가 있고
옷을 전부 입지 않는 경우는 빼줘야 하므로 마지막에 -1을 해준다는 것이다.
이해하기 쉽게 그림을 만들어 보았다.
그림과 함께 전체 코드를 확인해 보면 다음과 같다.
코드
def solution(clothes):
answer = {}
for cloth in clothes:
if cloth[1] in answer:
answer[cloth[1]] += 1
else:
answer[cloth[1]] = 1
cnt = 1
for i in answer.values():
cnt *= (i + 1)
return cnt - 1
📌 추가 (Counter함수 이용)
우리는 코드에서 옷의 종류의 개수를 알기 위해 파이썬의 딕셔너리를 이용했지만 collections의 Counter 함수를 사용하면 한 줄로 간편하게 구할 수 있다.
from collections import Counter
clothes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]
cnt = Counter([kind for name, kind in clothes])
print(cnt)
...
Counter({'headgear': 2, 'eyewear': 1})
'Algorithm' 카테고리의 다른 글
[파이썬] 프로그래머스 - 프린터 (0) | 2022.04.17 |
---|---|
[파이썬] 프로그래머스 - 기능개발 (0) | 2022.04.14 |
[파이썬] 프로그래머스 - 전화번호 목록 (0) | 2022.04.02 |
리트코드(LeetCode) 344번 문자열 뒤집기 (0) | 2022.03.28 |
[파이썬] 프로그래머스 - 완주하지 못한 선수 (0) | 2022.03.27 |