문제
링크
옷의 조합 수를 구하는 문제였다. 원소가 한 개 이상인 조합을 하되, 카테고리별로 하나씩만 선택할 수 있는 조건이다.
카테고리가 0,1,2 인 옷들을 입력 받았을 때 각 카테고리별로 2가지, 2가지, 1가지라면,
00 11 2
로 표현할 수 있다. 이때 1개 이상을 고르는 조합이다. 문자열을 따로 받을 필요없이 (3₩3₩2-1)만 구하면 된다.
이 식은 각 카테고리의 옷 수 +1 을 곱해서 1을 빼주는 것이다. 옷 수 +1 을 해주는 이유는 해당 카테고리에서 아무것도 선택하지 않는 가지수를 포함시켜주기 위함이고, -1 은 전체에서 아무것도 선택하지 않는 것을 빼주는 것이다.
회고
count 함수
나는 계산식까지는 알았는데 이를 코드로 딕셔너리를 이용해 구현하는 방법을 몰랐다.
아래 참고한 코드는 count라는 함수를 쓴 것이 특징적이다.
일단, types 리스트에서 옷의 타입을 문자열 그대로 받고 (여기서 옷의 이름은 불필요하다)
counts 리스트를 만들 때 해당 문자열이 등장하는 횟수에 해당하는 값을 요소로 넣어준다.
각 코드의 결과는 이런 식이다.types = [y for x,y in clothes] >>> ['headgear', 'eyewear', 'headgear']
counts = [types.count(type) for type in set(types)]
>>> [1, 2]
최종 코드
def solution(clothes):
answer = 1
types = [y for x, y in clothes]
counts = [types.count(type) for type in set(types)]
print(types, counts)
for c in counts:
answer *= c + 1
return answer - 1
아직 count 함수 연습이 더 필요하다
'⚡️algorithm' 카테고리의 다른 글
[힙] 프로그래머스. 더 맵게 (0) | 2022.05.23 |
---|---|
[해쉬] 프로그래머스 lv2. 전화번호 목록 (0) | 2022.05.20 |
[해쉬] 프로그래머스 lv1. 완주하지 못한 선수 (0) | 2022.05.20 |
[DP] 백준 2208. 보석줍기 (1) | 2022.05.19 |
프로그래머스 징검다리 - ing (0) | 2022.05.18 |