문제 설명
프로그래머스 레벨 2의 문제입니다.
요약하면 의상 중 하나의 의상은 무조건 (전체 중 하나의 의상, 각각 하나의 의상이 아님) 착용해야합니다. 또한 같은 종류에서 두개를 착용하지 못합니다.
옷들이 주어졌을때 조합을 구하는 문제입니다.
위의 입출력 예 - 1
보면 headgear
에 대한 의상이 2개, eyewear
에 대한 의상이 한개입니다.
이때 나올 수 있는 조합은
yellow_hat
, blue_sunglasses
, green_turban
, yellow_hat + blue_sunglasses
, green_turban + blue_sunglasses
위와 같이 5개입니다.
풀이
def solution(clothes):
cloth_group_by = {}
for cloth in clothes:
if cloth[1] in cloth_group_by:
cloth_group_by[cloth[1]].append(cloth[0])
else:
cloth_group_by[cloth[1]] = [cloth[0]]
answer = 1
for key in cloth_group_by:
answer = (len(cloth_group_by[key]) + 1) * answer
answer -= 1
return answer
변수 설명
cloth_group_by: 이차원 배열을 딕셔너리로 변경한 값입니다. { headgear: ["A", "B"], face: ["C"] } 와 같이 구성합니다.
answer: 조합의 수입니다.
간단 설명
각 의상의 종류별로 딕셔너리를 만듭니다. 그리고 각 의상종류의 개수를 모두 곱합니다. 이때 아까 만든 딕셔너리의 key만큼 순회하며 각각 딕셔너리 값의 길이만큼 곱해주는 것입니다.
그리고 모든 조합에서 아무 의상도 입지 않은 경우 1을 빼주어 반환합니다.
'개발 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 폰켓몬 (0) | 2021.01.28 |
---|---|
[프로그래머스] 튜플 (0) | 2021.01.27 |
[프로그래머스] 전화번호 목록 (0) | 2021.01.27 |
[프로그래머스] 예상 대진표 (0) | 2021.01.27 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2021.01.27 |