https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 단순화 하기
- 문제를 단순화 하여 어떻게 이 문제를 해결할 것인가가 가장 중요합니다.
- 해당 문제는 여러 종류의 옷, 그것을 각 종류별로 1개씩 이하 입기가 가능합니다.
코드적으로 시간복잡도를 가장 적게 종류를 탐색해서 구현하는 방법은 hash라고 생각을 하였습니다.
testcase 1번을 종류별로 해쉬화를 하면
종류 | 수량 |
headgear | 2 |
eyewear | 1 |
이렇게 나옵니다.
그러면 각 type마다의 경우의 수를 보겠습니다.
먼저 headgear인 경우.
1. 1번 headgear를 입는다.
2. 2번 headgear를 입는다.
3. 아무것도 입지 않는다.
총 3개의 경우가 나옵니다.
eyewear의 경우
1. eyewear를 입는다.
2. 아무것도 입지 않는다.
총 2개의 경우가 나옵니다
이렇게 경우마다의 수를 곱해주고 전부 입지않는 경우도 경우에 포함되어 있으니까 -1를 해줍니다.
실행코드입니다.
def solution(clothes):
hash_map = {}
# 옷을 해시화
for cloth, type in clothes:
hash_map[type] = hash_map.get(type, 0) + 1
# 아무것도 입지않은 경우를 추가
answer = 1
for type in hash_map:
answer *= (hash_map[type] + 1)
return answer - 1