728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42578?language=python3
문제 설명 :
오랜만에 풀었더니.. 알고리즘 사고(?라고 해야 하나.. 머리가 그대로 굳어버렸다... (럴수럴수,,,
해시를 이용하기 위해 딕셔너리를 야심차게 만들었지만 수학적 지식이 부족하여 결국 다른 사람들의 풀이를 보게 되었다..
새로 알게 된 점 :
경우의 수를 구할 때 A의 종류가 n개, B의 종류가 m개 일 때 모든 경우의 수는 (n+1)(m+1)으로 구할 수 있다.
이 식을 풀어 보면 (n+1)(m+1) = nm + n + m + 1이 되는데 여기서
mn : n과 m 모두 사용,
n : n만 사용,
m : m만 사용,
1 : 모두 사용 안함.
이렇게 경우의 수를 구할 수 있기 때문에 해당 식을 코드로 구현해야 한다.
제출한 답안 :
def solution(clothes):
answer = 1
closet = {}
for Kind, Type in clothes:
if Type not in closet.keys():
closet[Type] = [Kind]
else:
closet[Type] += [Kind]
for key, value in closet.items():
answer *= (len(value)+1)
return answer -1
clothes를 가지고 key가 타입, value가 종류인 딕셔너리를 만들고 나서 시작해야 한다.
또, 딕셔너리에 key가 이미 존재한다면 value를 덮어 씌우기 때문에 리스트 형태로 감싸서 더해 줘야 한다.
이렇게 생성한 key에 대한 value로 들어간 list의 길이를 (n+1)(m+1) 식에 맞춰 answer *= (len(value)+1)로 코드를 작성 해 주면 된다.
return 시 -1을 해 주는 이유는 해당 문제에서 아무것도 착용하지 않는 건 제외해야 하기 때문에 return 시 구한 모든 경우의 수에서 -1을 해 주어야 한다.
728x90