알고리즘

[프로그래머스] 의상

j9972 2023. 7. 8. 20:43
728x90

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

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

programmers.co.kr

 

2. 접근

1. 처음에는 dict()으로 같은 의상의 종류가 나올 때 마다 1씩 증가시키고, combinations 을 통해서 조합을 구해서 해결해보려 했지만, 시간초과가 떴다

2. 구글링을 했다

- dict()을 쓰는 방식은 같다.

- dict에 있는 value값들을 통해 ans을 구했다. [ (의상종류+1)을 모두 곱한 후 -1 ] 이 부분이 이해가 안갔다

-> " 의상종류가 3개면 각각의 부위에서 안입는것,첫번째,두번째,세번째 총 4개의 선택이 가능하고 부위별로 가능한 선택 수를 곱하면 모든 조합이 나오는데 최소 하나는 입어야 해서 1을 빼야 합니다. "을 듣고 나니 combination이 없이도 모든 조합을 구할 수 있다는 생각이 들었다

 

꿀팁

for문에서 name, typ 이렇게 2개로 해도 name은 안쓰는걸 아니까 _ 로 name을 대체할 수 있다

 

3. 풀이

def solution(clothes):
    ans = 1
    
    dic = dict()
    
#     for cloth in clothes:
#         name, typ = cloth
        
#         if typ in dic:
#             dic[typ] += 1
#         else:
#             dic[typ] = 1

# 위와 같은 코드이다
    for _, typ in clothes:
        
        if typ in dic:
            dic[typ] += 1
        else:
            dic[typ] = 1
        
    print(dic)
    
    for h in dic.values():
        ans *= (h+1)
        #print("{} {}".format(h, ans))
            
    return ans - 1