https://school.programmers.co.kr/learn/courses/30/lessons/42578
📌 문제
코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다.
예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야합니다.
종류이름
- 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.
- 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
- 코니는 하루에 최소 한 개의 의상은 입습니다.
코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
📌 아이디어
- 서로 다른 옷의 조합의 수를 구하기 위해서는 각 종류의 의상 개수 + 착용하지 않는 경우 를 고려하여 계산해주면 된다.
- 즉 위의 예시에서는 3 X 2 X 2X 2= 24가지 에서 아무것도 착용을 하지 않는 경우는 빼줘야 하므로 -1 해서 총 23가지이다. (하루에 최소 한 개의 의상은 입는다)
- 얼굴 : 동그란 안경, 검정 선글라스, 착용 X
- 상의 : 파란색 티셔츠, 착용 X
- 하의 : 청바지 ,착용 X
- 겉옷 : 긴 코드 , 착용 X
- input이 다음과 같은 리스트로 들어온다. 같은 종류별로 옷을 나누기 위해 hash를 사용한다.
- 옷의 종류를 key로 , 이름을 value로 저장한다.
- 각 key에 해당하는 value의 길이를 곱해준다음 1을 빼준다.
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
📌 코드
from collections import defaultdict
def solution(clothes):
comb = defaultdict(list)
for cl in clothes :
comb[cl[1]].append(cl[0])
count = 1
for key in comb:
count *= (len(comb[key])+1)
count -= 1
return count
📌 새로 알게 된 점
딕셔너리 초기값 지정
일반 dict의 경우에는 key가 존재하지 않으면 오류를 불러온다. 이때, defaultdict를 활용하면 쉽게 해결할 수 있다.
defaultdict는 기존에 키가 없는 경우 기본값을 할당하는데, 모든 키에 대하여 값을 설정한다.
만일 defaultdict()의 인수로 int를 전달하여 딕셔너리를 생성한다고 해보자. int를 기준으로 생성한 딕셔너리는 항상 0의 값으로 자동 초기값 설정이되므로 초기값을 설정하기 위한 별도의 코드가 필요없게 된다.
- int_dict ⇒ defaultdict(int)
- 초기값이 int인 0으로 주어진다.
- list_dict = defaultdict(list)
- 초기값이 list형태인 []로 주어진다.
- set_dict = defaultdict(set)
- 초기값이 set 형태로 {}가 주어진다.
'STUDY > Algorithm' 카테고리의 다른 글
[프로그래머스/해시] 베스트앨범 (0) | 2024.07.21 |
---|---|
[프로그래머스/해시] 전화번호 목록 (0) | 2024.07.21 |
[프로그래머스/해시] 포켓몬 , 완주하지 못한 선수 (2) | 2024.07.21 |
[프로그래머스/스택과큐] 주식가격 (0) | 2024.07.13 |
[프로그래머스/스택과큐] 프로세스 (0) | 2024.07.12 |