Problem Solving

[프로그래머스] 위장 - Python3

Dev_en 2023. 1. 31. 04:56

문제 설명

[의상의 이름, 종류]들이 주어질 때, 1개 이상의 의상을 입을 수 있는 의상 조합의 수를 구하는 문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  • 문제 분류 - 해시
  • 난이도 - Level 2

접근 방법

1) 종류별 조합을 구하기 위해 {의상 종류: [의상 이름, 의상 이름, ...]} 형태의 딕셔너리를 만든다.

2) 종류별 가능한 조합의 수들을 모두 곱한다. (종류별 0개 또는 1개 선택 가능)

3) 어떤 종류도 선택하지 않는 경우의 수 1을 뺀다.


답안 코드

+10
def solution(clothes):
    answer = 1
    
    # 종류 - 이름 사전 생성
    dic = {}
    for cloth in clothes:
        name = cloth[0]
        kind = cloth[1]
        
        if kind not in dic:
            dic[kind] = [name]
        else:
            dic[kind].append(name)
    
    # 조합
    # nC0~1 * mC0~1 ... - 1
    for kind in dic.keys():
        answer *= (1+len(dic[kind]))
    answer -= 1
    
    return answer