프로그래머스
[Python 파이썬] 프로그래머스 - 의상
민규링
2024. 6. 22. 13:04
2024년 6월 22일
문제 링크 : 프로그래머스 - 의상
문제 접근
각 카테고리의 옷은 0 ~ 1 가지 입을 수 있으며, 최소한 하나라도 입는 옷 코디 조합을 구하는 것이다.
단, 모든 옷을 0개 입는(아무것도 입지 않는) 경우는 코디 조합에 포함시키지 않아야 한다.
문제를 보자마자 딕셔너리로 카테고리별 옷들의 종류를 구분해주어야 겠다고 생각했다.
그러면 각 카테고리별로 옷이 몇 가지 씩 있는지 알 수 있는데, 단 해당 카테고리의 옷을 안입는다는 전제도 포함해야 하므로 공백문자("")또한 각 카테고리별로 추가해주었다.
우리는 여기서 가짓 수를 조합하는 공식을 떠올릴 수 있다.
A개의 상의와 B개의 하의와 C개의 신발을 입는 서로 다른 코디의 종류는 A * B * C 이다.
하지만 여기서는 안 입는 조건도 생각해야 하므로, (A + 1) * (B + 1) * (C + 1) 이다.
하지만! 아무것도 입지 않는 경우는 제외해야 하므로 위 결과값에서 1을 빼주어야 한다.
전체 코드
def solution(clothes):
answer = 1
dict = {}
categories = []
for c, category in clothes:
if category not in dict:
dict[category] = ["", c]
categories.append(category)
else:
dict[category].append(c)
for _, value in dict.items():
answer *= len(value)
# 아무것도 안 입는 조합은 빼야함
return answer - 1
if __name__ == "__main__":
clothes = [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
print(solution(clothes))
풀이 후기
풀고 나니 딕셔너리의 밸류로 옷 종류를 그대로 넣을 필요가 없다는 것을 깨달았다. 밸류에 그냥 해당 카테고리의 가짓수를 넣었다면 쪼오오금 더 효율적인 로직이었지 않을까 싶다.