https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(clothes):
answer = 1
clothe = {k:[] for _,k in clothes}
for name, kind in clothes :
clothe[kind].append(name)
for v in clothe.values() :
answer *= (len(v) + 1)
return answer - 1
다른 분들이 푸신 해설을 보다가 도움이 되는 설명이 있어서 가져옴!
만약에 옷의 종류가 1개라고 해봅시다. 개수는 a개입니다.
그럼 총 a가지의 경우가 있겠죠?
종류가 2개가 되고 각각의 옷의 개수는 a, b개입니다.
그럼 경우의 수는 a, b, ab가 되므로 조합의 개수는 (a+b) + (ab)가지입니다.
3개가 된다면? (a+b+c) + (ab+bc+ca) + (abc)가지입니다.
어디서 많이 보시지 않았나요? 학창시절에 우리는 다항식을 배우는데 위의 가짓수는 n차식(n = 옷의 종류의 개수) 계수들의 합입니다.
즉 옷의 종류가 3가지고 각각의 옷의 개수가 a, b, c라면 (x+a)(x+b)(x+c) = x3 + (a+b+c)x2 + (ab+bc+ca)x + (abc)라는 식이 정립됩니다. 보이시죠? 총 조합의 개수가 계수에 다 포함되어 있습니다.
해당 식의 계수의 합을 구하려면 x=1을 대입해주면 됩니다. 그 후 맨 앞 x3 의 계수는 정답에 포함되지 않으므로 마지막에 1을 빼주는 겁니다.
x=1을 대입한 식은 (1+a)(1+b)(1+c)가 되고 그 값에 1을 뺀 후 리턴해주면 정답이 나오는 이유가 그것입니다.
출처 : 강동희님
'𝘼𝙣𝙖𝙡𝙮𝙨𝙞𝙨 > ᴀʟɢᴏʀɪᴛʜᴍ' 카테고리의 다른 글
heapq와 deque의 차이 (0) | 2023.10.10 |
---|---|
pass와 continue의 차이 (0) | 2023.08.11 |
[Programmers] 가장 큰 수 (정렬) (0) | 2023.08.02 |
[Programmers] K번째수 (정렬) (0) | 2023.08.02 |
[Programmers] 정수를 나선형으로 배치하기 (0) | 2023.07.10 |