โ 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 ๊ณต์ ํ์ฉ
โ 3049 ๋ค๊ฐํ์ ๋๊ฐ์ โ
import math
print(math.comb(int(input()),4))
๐ป ๋ค๊ฐํ ๋ด์ ๋๊ฐ์ ๊ต์ฐจ์ ๊ฐ์๋ ๋ณ์ ๊ธธ์ด๋ฅผ n์ด๋ผ ํ๋ฉด nC4์ด๋ค. ๋ค ๊ฐ์ ์ ์ด ๋ชจ์ฌ ํ ๊ฐ์ ๊ต์ฐจ์ ์ ์์ฑํ๊ธฐ ๋๋ฌธ.
โ 21760 ์ผ๊ตฌ ์์ฆ โ
import sys, math
input=sys.stdin.readline
T=int(input())
for _ in range(T):
N,M,k,D=map(int,input().split())
B=int(D/(math.comb(M,2)*k*N+math.comb(N,2)*M*M))
if B==0:
print(-1)
else:
print(math.comb(M,2)*k*B*N+math.comb(N,2)*M*M*B)
๐ป ๋ค๋ฅธ ์ง์ญ๋ฆฌ๊ทธ์์ ๊ฒฝ๊ธฐ ์ b*m*m*nC2 + ๊ฐ์ ๋ฆฌ๊ทธ ๋ด์ ๊ฒฝ๊ธฐ ์ b*k*n*mC2 ๊ฐ D์ดํ๋ผ๋ ์์ ์ธ์ฐ๋ฉด ๋๋ค. ์๋ ๊ทธ๋ฆผ ์ฐธ์กฐ(์ถ์ฒ)
(์ด ๋ b = 0์ด๋ฉด - 1 ์ถ๋ ฅ, ๊ทธ๋ ์ง ์์ผ๋ฉด int() ํจ์๋ก ๊ตฌํ B๋ฅผ ์ฌ์ฐ์ฐํด D์ดํ์ ๊ฒฝ๊ธฐ ์ ์ถ๋ ฅ)
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Number Theory Upper-Intermediate I - 9 Solvedโ (0) | 2023.02.28 |
---|---|
โ BFS&DFS Intermediate I - 20 Solvedโ (0) | 2023.02.17 |
โ Set/Map Intermediate I - 14 Solvedโ (0) | 2023.02.15 |
โ Binary Search Upper-Intermediate I - 6 Solvedโ (0) | 2023.02.09 |
โ Greedy Upper-Intermediate I - 9 Solvedโ (0) | 2023.01.27 |
๋๊ธ