꼬꼬마 블로그

꼬꼬마의 기술 블로그

문제 설명

프로그래머스 레벨 2의 문제입니다.

 

요약하면 의상 중 하나의 의상은 무조건 (전체 중 하나의 의상, 각각 하나의 의상이 아님) 착용해야합니다. 또한 같은 종류에서 두개를 착용하지 못합니다.

옷들이 주어졌을때 조합을 구하는 문제입니다.

 

위의 입출력 예 - 1 보면 headgear에 대한 의상이 2개, eyewear 에 대한 의상이 한개입니다.

이때 나올 수 있는 조합은

 

yellow_hat, blue_sunglasses, green_turban, yellow_hat + blue_sunglasses, green_turban + blue_sunglasses

 

위와 같이 5개입니다.

 

풀이

def solution(clothes):
    cloth_group_by = {}

    for cloth in clothes:
        if cloth[1] in cloth_group_by:
            cloth_group_by[cloth[1]].append(cloth[0])
        else:
            cloth_group_by[cloth[1]] = [cloth[0]]

    answer = 1
    for key in cloth_group_by:
        answer = (len(cloth_group_by[key]) + 1) * answer

    answer -= 1
    return answer

변수 설명

cloth_group_by: 이차원 배열을 딕셔너리로 변경한 값입니다. { headgear: ["A", "B"], face: ["C"] } 와 같이 구성합니다.

answer: 조합의 수입니다.

 

간단 설명

각 의상의 종류별로 딕셔너리를 만듭니다. 그리고 각 의상종류의 개수를 모두 곱합니다. 이때 아까 만든 딕셔너리의 key만큼 순회하며 각각 딕셔너리 값의 길이만큼 곱해주는 것입니다.

 

그리고 모든 조합에서 아무 의상도 입지 않은 경우 1을 빼주어 반환합니다.