๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 11051_์ดํ•ญ ๊ณ„์ˆ˜ 2

๋ฟŒ์•ผ._. 2022. 2. 21. 15:43

Silver I

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/11051)

<์ดํ•ญ ๊ณ„์ˆ˜ 2>

๋ฌธ์ œ 

 

์ž์—ฐ์ˆ˜ N๊ณผ ์ •์ˆ˜ K๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ดํ•ญ ๊ณ„์ˆ˜๋ฅผ 10,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N≤ 1,000, 0 ≤ K ≤ N)

 

 

์ถœ๋ ฅ 

 

10,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

- my solution

 

import sys

if __name__=='__main__':
    n,k=map(int,sys.stdin.readline().split())

    a=1
    b=1

    # ์ดํ•ญ ๊ณ„์ˆ˜ = n!/k!(n-k)!
    for i in range(k+1,n+1):
        a*=i

    for i in range(1, n-k+1):
        b*=i

    print((a//b)%10007) # 10007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€

 

์ดํ•ญ ๊ณ„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€

 

n!/k!(n-k)!

 

์ด๋‹ค.

 

์œ„๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € n!/k! ๋ฅผ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ์ธ k+1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ๊ฐ’์„ ๊ณฑํ•œ๋‹ค.

๊ทธ๋‹ค์Œ (n-k)! ๊ณ„์‚ฐ์„ ์œ„ํ•ด ๊ตฌํ•ด์ค€ ํ›„ ์œ„์—์„œ ๊ตฌํ•œ ๊ฒƒ๊ณผ ๋ฐฉ๊ธˆ ๊ตฌํ•œ ๊ฐ’์„ ๋‚˜๋ˆ ์ค€๋‹ค.

๋ฌธ์ œ์—์„œ 10007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ผ ํ–ˆ์œผ๋ฏ€๋กœ 10007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

 

โ“ ์ƒ๊ฐ๋ณด๋‹ค ์‰ฌ์šด ๋ฌธ์ œ์ž„์—๋„ ํ•œ ๋ฒˆ๋งŒ์— ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

์ฒ˜์Œ์—๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. OverflowError๋กœ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œํ˜„ํ•˜๊ธฐ์— ๋„ˆ๋ฌด ํด ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์˜€๋‹ค.

์ด ๋ฌธ์ œ์—์„œ ๋ฐœ์ƒํ•œ ์ด์œ ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋‚˜๋ˆŒ ๋•Œ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜์—ฌ ์†Œ์ˆ˜์ ์ด ๋„ˆ๋ฌด ์ปค์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ณ ์นœ ๋ฐฉ๋ฒ•์ด n!, k!, (n-k)! ๋ฅผ ๊ฐ์ž ๋‹ค ๊ณฑํ•œ ํ›„์— ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์„ ํƒํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ์—๋Š” 'ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค'๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” /์™€ //์˜ ์ฐจ์ด ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€๋‹ค. /์—์„œ //๋กœ ๊ณ ์นœ ํ›„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 


์ƒ๊ฐ๐Ÿค”

 

์‰ฌ์šด ๋ฌธ์ œ์˜€์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ์ œ์ถœ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.