⚡️algorithm

[해쉬] 프로그래머스 lv2. 위장

남남이루 2022. 5. 20. 18:39

문제

링크
옷의 조합 수를 구하는 문제였다. 원소가 한 개 이상인 조합을 하되, 카테고리별로 하나씩만 선택할 수 있는 조건이다.
카테고리가 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 함수 연습이 더 필요하다