Algorithms

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μ˜μƒ - python

thals0 2023. 10. 30. 15:55
728x90

섀계

μ’…λ₯˜λ₯Ό key, μ’…λ₯˜λ§ˆλ‹€ μ˜μƒμ˜ 갯수λ₯Ό value둜 λ„£μŒ

1개, 2개, 3개 … n개 μž…μ„ 수 있음

예) 2개 μž…λŠ” 경우 key 쀑에 2개λ₯Ό 뽑아 λ‚΄μ„œ value κ³±ν•˜λ©΄ 됨

μ΄λŸ°μ‹μœΌλ‘œ 1,2,3 .. nκ°œκΉŒμ§€μ˜ 경우의 수λ₯Ό λ‹€ λ”ν•˜λ©΄ λ‹΅μž„

μ½”λ“œ

from itertools import combinations

def solution(clothes):
    answer = 1
    dict = {}
    for i in clothes:
        if i[1] not in dict:
            dict[i[1]] = 1
        else:
            dict[i[1]] += 1
    
    for i in range(1,len(dict)+1):
        for j in list(combinations(dict, i)):
            tmp = 1
            for k in j:
                tmp *= dict[k]
            answer += tmp
    return answer-1

1λ²ˆν…ŒμΌ€λ§Œ ν‹€λ¦Ό

1번이 λͺ¨λ“  μ˜μƒμ˜ μ’…λ₯˜μ™€ 이름이 λ‹€λ₯Έ κ²½μš°μΈλ“―

μ˜μƒμ˜ 수 ≤ 30 μ΄λ―€λ‘œ, μ΅œλŒ€ 30이라고 κ°€μ •ν–ˆμ„ λ•Œ

μ‹œκ°„λ³΅μž‘λ„ 계산해보면 30 * 30!/r!(30-r)! * 30 * 30 인데 이게 1얡이 λ„˜λ‚˜ ?

음 κ·Έλ ‡κ΅¬λ‚˜

쑰합을 μ“°λ©΄ 무쑰건 μ•ˆλ˜κ² λ‹€ . . .

 

μ •λ‹΅μ½”λ“œ

def solution(clothes):
    answer = 1
    dict = {}
    for i in clothes:
        if i[1] not in dict:
            dict[i[1]] = 1
        else:
            dict[i[1]] += 1
    
    for i in dict.values():
        answer *= (i+1)
    return answer-1
  1. μ˜μƒμ˜ μ’…λ₯˜κ°€ "1κ°€μ§€"인 경우. ( μ˜μƒ Aκ°€ a 개 ) a 개의 쑰합이 κ°€λŠ₯
  2. μ˜μƒμ˜ μ’…λ₯˜κ°€ "2κ°€μ§€"인 경우. ( μ˜μƒ A a개, μ˜μƒ B, b개 ) μ˜μƒ A, Bλ₯Ό ν•œκ°€μ§€ μ”© μž…λŠ” 경우 a, b μ˜μƒ A Bλ₯Ό μ„žμ–΄ μž…λŠ” 경우 ab a + b + ab 개의 쑰합이 κ°€λŠ₯
  3. μ˜μƒμ˜ μ’…λ₯˜κ°€ "3κ°€μ§€"인 경우. ( μ˜μƒ A a개, μ˜μƒ B, b개, μ˜μƒ C c개) μ˜μƒ A, B, Cλ₯Ό ν•œκ°€μ§€ μ”© : a, b, c μ˜μƒ A B / A C / B C 2μ’…λ₯˜μ”© : ab, ac, bc μ˜μƒ A B Cλ₯Ό μ„žμ–΄ μž…λŠ” 경우 : abc a + b + c + ab + ac + bc + abc개의 쑰합이 κ°€λŠ₯

이 것을 κ³΅μ‹μœΌλ‘œ λ§Œλ“€λ©΄

: (1번 μ’…λ₯˜μ˜ 수 + 1 )(2번 μ’…λ₯˜μ˜ 수 + 1) ...(n번 μ’…λ₯˜μ˜ 수 + 1) - 1

옷의 μ’…λ₯˜ 1개 : ( a + 1 ) - 1 = a + 1 - 1

옷의 μ’…λ₯˜ 2개 : (a + 1)(b + 1) - 1 = ab + a + b + 1 - 1

옷의 μ’…λ₯˜ 3개 : (a + 1)(b + 1)(c + 1) - 1 = abc + ab + ac + bc + a + b + c + 1 - 1

μ–΄λ €μ› λ˜ 점

이게 μˆ˜ν•™λ¬Έμ œμ—¬ ν”„λ‘œκ·Έλž˜λ° λ¬Έμ œμ—¬ ..

728x90