Problem solving

백준 1413번 박스 안의 열쇠 (Python 3)

storkbear 2022. 9. 16. 16:18

 

Baekjoon online judge 1413번 파이썬

 

링크

https://www.acmicpc.net/problem/1413

 

1413번: 박스 안의 열쇠

첫째 줄에 박스와 열쇠의 개수 N과 폭탄의 개수 M이 공백을 사이에 두고 주어진다. N은 20보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다.

www.acmicpc.net

소스코드

import sys
from collections import deque
input=sys.stdin.readline

def gcd(a, b):
  while (b != 0):
    temp = a % b
    a = b
    b = temp
  return abs(a)

def reduceFraction(bunja, bunmo):
  frac = [ bunja, bunmo ]

  if (frac[1] == 0): # 분모가 0일 경우에 에러 반환
    frac[0] = 0
    frac[1] = 0
    return frac

  gcd_result = gcd(frac[0], frac[1])

  frac[0] = str(frac[0] // gcd_result)
  frac[1] = str(frac[1] // gcd_result)

  return frac

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

dp=[[0 for _ in range(21)] for _ in range(21)]
dp[1][1]=1

for i in range(1,n+1):
    for j in range(1,i+1):
        if i==1 and j==1:
            continue
        dp[i][j]=dp[i-1][j-1]+(i-1)*dp[i-1][j]


for i in range(1,n+1):
    dp[n][i]+=dp[n][i-1]

print('/'.join(reduceFraction(dp[n][m],dp[n][n])))