BOJ/๐Ÿฅˆ

โ˜…Combinatorics Intermediate I - 3 Solvedโ˜…

metamong 2023. 2. 16.

โ˜… 2407 ์กฐํ•ฉ โ˜…

import math
n,m=map(int,input().split())

print(math.factorial(n) // (math.factorial(n-m) * math.factorial(m)))

๐Ÿ‘ป ์œ„ ๊ณต์‹๋งŒ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋!  


โ˜… 9375 ํŒจ์…˜์™• ์‹ ํ•ด๋นˆ โ˜…

import sys
input=sys.stdin.readline

for _ in range(int(input())):
    n=int(input())
    fashion={}
    if n==0:
        print(0)
    else:
        for _ in range(n):
            clothes=input().split()
            if clothes[1] in fashion:
                fashion[clothes[1]]+=1
            else:
                fashion[clothes[1]] = 1
        l=list(fashion.values())

        answer=l[0]
        for i in range(1,len(l)):
            answer+=(answer*l[i])
            answer+=l[i]
        print(answer)

 

๐Ÿ‘ป ์•Œ๊ณ ๋ฆฌ์ฆ˜: hash table ๊ตฌํ˜„ + combinatorics 2๊ฐœ

 

๐Ÿ‘ป โ‘  ์ผ๋‹จ, ๊ฐ ์˜์ƒ ์ข…๋ฅ˜๋ณ„๋กœ ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€, ๊ฐœ์ˆ˜๊ฐ€ ์ค‘์š”ํ•˜๋ฏ€๋กœ dictionary hash table์„ ๊ตฌํ˜„ํ•˜์—ฌ 2๊ฐ€์ง€ ์ •๋ณด {์˜์ƒ ์ข…๋ฅ˜: ํ•ด๋‹น ์ข…๋ฅ˜ ๋‚ด์˜ ์˜์ƒ ๊ฐœ์ˆ˜}๋ฅผ ์ €์žฅ

→ hash table์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ๊ฐ ์ข…๋ฅ˜๋ณ„๋กœ ์˜์ƒ ๊ฐœ์ˆ˜๋ฅผ updateํ•˜๋Š” ์—ฐ์‚ฐ์€ O(1) 

 

๐Ÿ‘ป โ‘ก ์ ์–ด๋„ ํ•œ ๊ฐœ๋ฅผ ์ฐฉ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”, ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ ์ข…๋ฅ˜๋ณ„ ์˜์ƒ์˜ ๊ฐœ์ˆ˜๊ฐ€ [3,2,1]์ผ ๊ฒฝ์šฐ ํ•œ ์ข…๋ฅ˜๋ฅผ ์ฐฉ์šฉํ•œ ๊ฒฝ์šฐ 3 + 2 + 1 / ๋‘ ์ข…๋ฅ˜๋ฅผ ์ฐฉ์šฉํ•œ ๊ฒฝ์šฐ 3*2 + 2*1 + 3*1 / ์„ธ ์ข…๋ฅ˜ ๋ชจ๋‘๋ฅผ ์ฐฉ์šฉํ•œ ๊ฒฝ์šฐ 3*2*1์ด ๋œ๋‹ค.

→ itertools์˜ combinations๋ฅผ ํ™œ์šฉํ•ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜์—ดํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๋‚ด๋ถ€ ๊ฐ€์ง“์ˆ˜ ๊ณฑ๋“ค์„ ์ญ‰ ๋”ํ•˜๋ฉด๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ๋ฐœ์ƒ (๊ฐ€์ง“์ˆ˜๊ฐ€ ๋งŽ์•„์ง)

→ ๋”ฐ๋ผ์„œ ์กฐํ•ฉ๋ก ์˜ ์•„์ด๋””์–ด๋ฅผ ์ ํ™”์‹์„ ์„ธ์›Œ dp-table์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, ์ž…์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์† updateํ•œ๋‹ค.

 

โ€ป N๊ฐ€์ง€์˜ ์ข…๋ฅ˜๋กœ ์ž…์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜

→ a(i) (i=1...n) = i๋ฒˆ์งธ ์ข…๋ฅ˜์˜ ์˜์ƒ ๊ฐœ์ˆ˜

Fashion(N) = N๋ฒˆ์งธ์˜ ์ข…๋ฅ˜๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž…๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜

 

Fashion(N) = Fashion(N-1)*a(n) + a(n)

answer = Fashion(1) + Fashion(2) + Fashion(3) + .... + Fashion(N)

 

→ N๋ฒˆ์งธ ์ข…๋ฅ˜๋ฅผ ์ œ์™ธํ•œ, N-1๋ฒˆ์งธ ์ข…๋ฅ˜๊นŒ์ง€์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์•ˆ๋‹ค๋ฉด, ๊ฐ ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ๋งˆ์ง€๋ง‰ a(n)์„ ๊ณฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

→ ์ถ”๊ฐ€๋กœ, ์•ž์˜ ๋ชจ๋“  ์ข…๋ฅ˜๋ฅผ ์ž…์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ ์ข…๋ฅ˜๋Š” ๋ฐ˜๋“œ์‹œ ์ž…์–ด์•ผ ํ•˜๋ฏ€๋กœ a(n)์„ ๋”ํ•ด์ฃผ๋ฉด ๋จ

 

→ ์ตœ์ข…์ ์œผ๋กœ ๋ชจ๋“  Fashion() ๊ฒฐ๊ณผ๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ๋‹ต ์™„์„ฑ!

 

๐Ÿ‘ป hash-table๋กœ ํ•„์š” ์ •๋ณด๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ , ์ ํ™”์‹ idea๋กœ ์กฐํ•ฉ๋ก  ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณ ๋‚œ๋„ ๋ฌธ์ œ!

 

๐Ÿ‘ป ์กฐํ•ฉ๋ก  ์š”์•ฝ ๐Ÿ‘ป

Q. ๊ฐ ์˜ท์˜ ์ข…๋ฅ˜๋ณ„๋กœ a,b.. ,x๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ ์–ด๋„ 1๊ฐœ ์ด์ƒ์˜ ์˜ท์„ ์ž…๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”?

A. (a+1)*(b+1)* ... *(x+1) - 1

→ ๊ฐ ์ข…๋ฅ˜๋ณ„๋กœ ๋ณด์•˜์„ ๋•Œ ์˜ˆ๋ฅผ ๋“ค์–ด ์ฒซ ๋ฒˆ์งธ ์ข…๋ฅ˜์˜ ์˜ท์ด a๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉด, ์•ˆ์ž…๋Š” ๊ฒฝ์šฐ๋ฅผ ํฌํ•จํ•ด (a+1) ๊ฒฝ์šฐ์˜ ์ˆ˜ ์กด์žฌ. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ 1์”ฉ ๋”ํ•œ ๊ฒฝ์šฐ๋ฅผ ์„œ๋กœ ๋ชจ๋‘ ๊ณฑํ•˜๊ณ , ํ•˜๋‚˜๋„ ์•ˆ ์ž…์—ˆ์„ ๊ฒฝ์šฐ ๋‹จ 1๊ฐ€์ง€๋งŒ ๋นผ๋ฉด ๋!

 

- ์กฐํ•ฉ๋ก  ํ™œ์šฉ -

import sys
input=sys.stdin.readline

for _ in range(int(input())):
    n=int(input())
    fashion={}
    if n==0:
        print(0)
    else:
        for _ in range(n):
            clothes=input().split()
            if clothes[1] in fashion:
                fashion[clothes[1]]+=1
            else:
                fashion[clothes[1]]=2
        l=list(fashion.values())

        answer=1
        for i in l:
            answer*=i
        print(answer-1)

โ˜… 1010 ๋‹ค๋ฆฌ ๋†“๊ธฐ โ˜…

 

import sys,math
input=sys.stdin.readline

for _ in range(int(input())):
    N,M=map(int,input().split())
    #MCN
    print(math.factorial(M)//(math.factorial(N)*math.factorial(M-N)))

 

๐Ÿ‘ป ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฑด, ๊ฐ• ์˜ค๋ฅธ์ชฝ M๊ฐœ์˜ ์ง€์ ์—์„œ N๊ฐœ์˜ ์ง€์ ์ด ๋„์ฐฉํ•  N๊ฐœ์˜ ๋„์ฐฉ์  ๊ฐœ์ˆ˜๋ฅผ ๊ณ ๋ฅด๊ธฐ๋งŒ ํ•˜๊ธฐ

 

๐Ÿ‘ป MCN ๊ณต์‹ ํ™œ์šฉ


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€