728x90
반응형
📌 문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/42578
📌 문제설명
코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다.
예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야합니다.
- 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.
- 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
- 코니는 하루에 최소 한 개의 의상은 입습니다.
코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
# 제한사항
- clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
- 코니가 가진 의상의 수는 1개 이상 30개 이하입니다.
- 같은 이름을 가진 의상은 존재하지 않습니다.
- clothes의 모든 원소는 문자열로 이루어져 있습니다.
- 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
📌 풀이과정
- 의상의 종류와 의상의 이름을 이용해 해시를 만들어줘야 할 것 같았다. => 딕셔너리 사용
- 처음에는 key = '의상의 종류' values = ['의상의 이름1', 2.. ] 이렇게 만들었다. 그런데 굳이..? 싶어서 구글링을 해봤더니 📢 몇 개가 있는지가 더 중요하다는 점에서 숫자 1을 더해가면 된다는 걸 알았다.
- 서로 다른 종류를 이용해 조합의 수를 구해야 했다. (사실 여기서 막힘.. 수학 머리 어디갔는데 ㅠ.ㅠ)
- 종류A의 개수가 a개, 종류B의 개수가 b개라고 하면
- 1) a x b => 종류 모두 사용할 때 조합
- 2) a => 종류 A만 이용
- 3) b => 종류 B만 이용
- 이걸 코드로 표현하려면, 각 종류마다, 1) item개 중 1개 사용할 때와 2) 그 종류를 아예 안 사용할 때로 나눌 수 있다. 즉, 그 종류에 n개의 원소가 있다면 n + 1로 표현할 수 있는 것이다. 이걸 코드로 표현하면 아래와 같다.
for i in hash_map.values():
answer *= (i+1)
📌 풀이코드
# 1:35 start 1:57 stop 5:50 start
def solution(clothes):
answer = 1
# 의상의 종류를 기준으로 해시를 만들어야 할 듯
hash_map = {}
for cloth in clothes:
if cloth[1] in hash_map.keys():
hash_map[cloth[1]] += 1
else:
hash_map[cloth[1]] = 1
for i in hash_map.values():
answer *= (i+1)
return answer - 1
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 알고리즘고득점Kit-완전탐색-최소직사각형 (1) | 2024.10.14 |
---|---|
[프로그래머스/Python] 알고리즘고득점Kit-해시-폰켓몬 (5) | 2024.10.13 |
[프로그래머스/Python] 알고리즘고득점Kit-해시-전화번호 목록 (0) | 2024.10.13 |
[프로그래머스/Python] 알고리즘고득점Kit-정렬-가장 큰 수 (0) | 2024.10.12 |
[프로그래머스/Python] 알고리즘고득점Kit-스택/큐-같은숫자는 싫어 (1) | 2024.10.12 |