본문 바로가기
알고리즘 & PS

[프로그래머스] 의상 (Lv 2)

by 다람이도토리 2024. 10. 28.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

해시 + 간단한 수학 문제이다.

문제는 4개의 의상 종류지만 N개로 확장시키는 아이디어는 수학에 있다.
모든 의상 종류 중 최대 1개씩 고르는 경우의 수를 어떻게 구할까?
"안 고른다" 라는 선택지를 추가하면 된다. 그리고 맨몸은 안되니 -1. 간단하다.

어차피 같은 이름의 의상도 없으니 앞은 더미고, 뒤만 세주면 된다. O(n)이면 해결되는 간단한 문제.

def solution(clothes):
    clothes_dict = {}
    for c in clothes:
        if c[1] not in clothes_dict:
            clothes_dict[c[1]] = 1
        else:
            clothes_dict[c[1]] += 1
    answer = 1
    for c in clothes_dict:
        answer *= (clothes_dict[c] + 1)
    return answer-1