본문 바로가기
카테고리 없음

[프로그래머스] 해시 - 의상

by 박매트 2024. 1. 24.

 

나의 답

def solution(clothes):
    
    clothes.sort()
    
    dic = {}
    num = 0 
    
    for value, t in clothes:
        dic[t]=0
        
    for value, t in clothes:
        dic[t]+=1
    
    for k in dic:
        if(dic[k]==1):
            num+=1
            
    if(len(dic)==1 and num==0):
        return len(clothes)
        
    all_value = pow(2, len(clothes))-1
    check_value = pow(2, num)
    
    
    return all_value - check_value

 

처음에 감도 안잡혀서

같이 스터디하는 맹지 언니의 말을 듣고

type :  type에 해당되는 옷들의 개수

이렇게 관리를 했다. 

 

타입이 뭣인지는 중요하지 않았기에, 개수만 알면 된다고 생각을 했기 때문이다.

개수가지고 온갖 확통 문제 푸는 것 처럼 생각을 했다.

중복 허용O 모든 경우의 수 - 중복된 경우의 수를 뺴려고 하였으나

각각 구하는 건 쉽지 않았다.

따라서 답을 보게 되었따...ㅎㅎ

 

다른 사람 답

def solution(clothes):
    clothes_type = {}

    for c, t in clothes:
        if t not in clothes_type:
            clothes_type[t] = 2
        else:
            clothes_type[t] += 1

    cnt = 1
    for num in clothes_type.values():
        cnt *= num

    return cnt - 1

 

type : type에 해당하는 옷들의 개수까지 관리하는 건 맞았는데, 

이 때 개수에문제 점이 있었다.

처음에 2개로 초기화를 해두고 시작했어야 했다 . 각 type 당 나올 수 있는 경우의 수는 {아예안입은경우, 1개인 경우} 이니까

그 후로도 해당 타입의 수가 있다면 1을 더해주는 것이다.

 

그래서 각 타입 당 개수를 곱해주면 총 경우의 수가 나온다는 결론..!

 

중복을 허용하지 않는 경우, 각 type의 개수끼리 곱해주면 총 경우의 수가 나오나보다.........ㅎㅎ

마지막에 1을 빼누느 경우는 모두 안입었을 경우를 빼준거라고 한다!