우당탕탕 개발일지

[해시] 프로그래머스 level 2 의상 (Python 파이썬) 본문

알고리즘

[해시] 프로그래머스 level 2 의상 (Python 파이썬)

민아당긴아 2024. 2. 11. 13:42

💡문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

💡문제 분석 요약

옷의 조합의 개수를 구하는 문제

중복 사용 불가능

옷을 최소 하나 이상 선택해야 해

💡알고리즘 설계

예를 들어 옷의 종류가 상의 하의만 있고, 상의가 3개 하의가 4개 있을 경우 만들어낼 수 있는 옷의 조합은 (3+1)*(4+1) - 1 = 19가지이다.

따라서 옷의 종류별 옷이 뭐가 있는지 파악할 수 있도록 딕셔너리를 만들고,

딕셔너리의 길이를 구해서 각 종류별로 옷이 몇 개 있는지 파악한다

그다음에 곱셈을 통해 조합의 개수를 구한다.

 

 

💡코드

def solution(clothes):
    closet = {}
    answer = 1
    for i in clothes:
        if i[1] in closet:
            closet[i[1]].append(i[0])
        else:
            closet[i[1]] = [i[0]]
    for c in closet:
        answer *= ( len(closet[c]) + 1)
        print(answer)
    return answer - 1

 

💡 오답 풀이

...

 

💡 다른 풀이

...

 

💡 느낀점 or 기억할정보

딕셔너리에 아직 없는 key라면 추가해주고, 이미 있는 key라면 value 리스트에 append를 해준다

딕셔너리 abc = {"a" : [1, 2, 3]}일 때,
len(a) = 1이고(a라는 키 자체의 길이) len(abc[a]) = 3이다(a라는 키에 대응하는 값의 길이)