REC

프로그래머스 Lv.2: 의상 - Python 풀이 본문

Algorithm

프로그래머스 Lv.2: 의상 - Python 풀이

서서리 2025. 1. 30. 23:55
SMALL

문제 설명

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

  • 매개변수: 코니가 가진 의상들이 담긴 2차원 문자열 배열 clothes.
    • clothes의 각 행은 [의상의 이름, 의상의 종류]의 형식.
    • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고, 알파벳 소문자 또는 '_' 로만 이루어진다.
    • 코니가 가진 의상의 수는 1개 이상 30개 이하이고, 같은 이름을 가진 의상은 존재하지 않는다.
    • 예시) [["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]]
  • 반환: 서로 다른 옷의 조합의 수.
  • 규칙
    • 각 종류별로 최대 1가지 의상만 착용할 수 있다.
    • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산한다.
    • 코니는 하루에 최소 한 개의 의상은 입어야 한다.

풀이 과정

from itertools import combinations

def solution(clothes):
    answer = 1
    clothes_dict = {}
    for _, kind in clothes:
        clothes_dict[kind] = 0
    for _, kind in clothes:
        clothes_dict[kind] += 1
    for k,v in clothes_dict.items():
        answer *= len(list(combinations([1 for _ in range(v)], 1))) + 1
    return answer - 1

 

옷의 종류를 key로 갖고, 그 종류의 옷 개수를 value로 갖는 해시 테이블은 바로 만들었는데 조합 일반식을 세우는 데에 한참을 시간 쓰다가 도저히 모르겠어서 아래의 글을 보고 풀었다. 너무 설명을 잘해주셔서 내가 더 설명할 건 없다.

 

링크: https://school.programmers.co.kr/questions/31757

 

풀면서도 '아니 이게 어떻게 해시 문제야? 수학 아닌가' 했는데 나만 그런 거 아니라서 다행이다.

어떻게 이렇게 생각해서 식을 만들어내지... 나의 모든 수학적 사고는 고3 때가 마지막이라

까먹을 때쯤 이 문제가 다시 나온다면 솔직히 그때도 틀릴 것 같다.

 

뭐 어쩌겠어ㅠ 반복만이 답이다.

그래도 해시 문제라고 해시 테이블 만들었으니 그거는 칭찬한다.

LIST