문제 확인

 

프로그래머스

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

programmers.co.kr

나의 풀이

  • 한 부위의 옷은 입거나, 안 입은 경우 2 가지만 존재한다.
  • 입을 경우, 현재 부위에 속하는 옷 개수 만큼의 경우가 가능하고, 입지 않는 경우는 1 가지만 있다.
  • 따라서 (현재 부위 옷의 개수 + 1)을 통해서, 모든 위장 경우의 수를 표현할 수 있다.
  • 최소 1 개의 의상은 입어야 하기 때문에, 마지막에 1을 빼주면 전체 경우의 수를 얻을 수 있다.
# n, m, k, l
# nC1, mC1, kC1, lC1 -> n, m, k에 대한 선택
# 종류가 많은 경우 -> 시간 초과가 발생할 것 -> 어떻게 계산???...
from collections import defaultdict

def solution(clothes):
    # 조합의 개수
    answer = 1
    cloth_info = defaultdict(list)
    # type 별 옷 정리하기
    for c, c_type in clothes:
        cloth_info[c_type].append(c)
    # 옷 조합 = (해당 부위 옷을 입은 경우 + 안 입은 경우)
    for c_type, c in cloth_info.items():
        answer *= (len(c) + 1)
    # 아무것도 입지 않은 경우 제외
    answer -= 1
    return answer