[프로그래머스 / 해시(L.v2)] 의상 - 파이썬

Seung Hyeon ·2023년 5월 11일
0

알고리즘

목록 보기
4/10
post-thumbnail

프로그래머스 문제 링크

문제 조건

  • 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 즉 같은 종류의 의상을 2개 이상 입을 수 없다.
  • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
  • 하루에 최소 한 개의 의상은 입습니다.
  • 같은 이름을 가진 의상은 존재하지 않습니다.
  • 코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
  • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.

 

입출력 예시

 

입출력 예시 설명

headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다.

1. yellow_hat
2. blue_sunglasses
3. green_turban
4. yellow_hat + blue_sunglasses
5. green_turban + blue_sunglasses
  1. 같은 종류(face, headgear..)의 의상을 동시에 입을 수 없다
    → 종류별로 한 개 의상만 착용 가능
  2. 최소 한 개 이상의 의상을 입어야 한다
    (종류별로 한 개씩 입어야 한다 X)

 

문제 접근 방법

● 경우의 수 공식으로 접근

  • 종류별로 아무것도 안입을 수 있는 경우를 고려 :
    (얼굴의 의상 갯수 + 1) X (상의의 의상 갯수 + 1) X (하의의 의상 갯수 + 1) X (겉옷의 의상 갯수 + 1)
  • 모두 안입는 경우는 없다.(무조건 하나는 입어야 함) : -1
    ▶ 최종 공식 : (얼굴의 의상 갯수 + 1) X (상의의 의상 갯수 + 1) X (하의의 의상 갯수 + 1) X (겉옷의 의상 갯수 + 1) - 1

● Hash 형태
{'headgear': ['yellow_hat', 'green_turban'], 'eyewear': ['blue_sunglasses']}

코드

def solution(clothes):
    answer = 1
    hash = {}
    
    for Name, Type in clothes:
        if Type not in hash:  # hash의 키 값에 Type이 없을 경우
            hash[Type] = [Name]
        else:
            hash[Type].append(Name)
            
    # print(hash)  {'headgear': ['yellow_hat', 'green_turban'], 'eyewear': ['blue_sunglasses']}
    
    for i in range(len(hash)):
        key_list = list(hash.keys())
        value_list = hash[key_list[i]]
        answer = answer * (len(value_list) + 1)
        
    return answer - 1
profile
안되어도 될 때까지

0개의 댓글