ProblemSolving/Hash

프로그래머스 위장 (파이썬)

OSNIM 2022. 5. 3. 20:56
반응형

Level 2 해시

 

문제 : https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

제출 코드

def solution(clothes):
    answer = 1
    dic = {category : 0 for name, category in clothes}
    
    for name, category in clothes:
        dic[category] += 1
    
    if len(dic) == 1:
        print(dic[category])
        answer = dic[category]
        return answer
    
    for k in dic.keys():
        answer *= (dic[k]+1)
    
    answer -= 1
    return answer

 

정리 및 복습

경우의 수를 찾지 못해서 질문하기 도움을 받았습니다.

다행히도 쉽게 설명해주는 분에게 힌트를 얻어 빠르게 풀 수 있었습니다.

 

만약 headgear(A, B) 2개, eyewear(a) 1개라면

headgear 를 끼는 경우의 수는 (X, A, B)

eyewear 를 끼는 경우의 수는 (X, a) 이므로

모든 조합을 나타내면 다음과 같습니다.

0개 끼는 경우 : (X, X)

1개 끼는 경우 : (A, X), (B, X), (X, a)

2개 끼는 경우 : (A, a), (B, a)

 

(X, A, B) * (X, a)  - 1 = (2+1) * (1+1) - 1

 

총 6개가 나오지만 최소 1개 이상 착용하므로 -1을 해주면 됩니다.

즉 각 (카테고리에 해당하는 옷의 수 +1)를 정답에 누적으로 곱해주고 마지막에 1을 빼주면 됩니다. 

 

반응형