ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋ฌธ์ œ

 

1010๋ฒˆ: ๋‹ค๋ฆฌ ๋†“๊ธฐ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๊ฐ•์˜ ์„œ์ชฝ๊ณผ ๋™์ชฝ์— ์žˆ๋Š” ์‚ฌ์ดํŠธ์˜ ๊ฐœ์ˆ˜ ์ •์ˆ˜ N, M (0 < N ≤ M < 30)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


โœ๐Ÿป ํ’€์ด

๐ŸŽจ Go

// https://www.acmicpc.net/problem/1010
package main

import (
	"bufio"
	"fmt"
	"os"
)

var (
	dp [][]int
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	fmt.Fscanln(reader, &t)
	dp = make([][]int, 31)
	for i := 0; i < len(dp); i++ {
		dp[i] = make([]int, 31)
	}
	for i := 0; i < t; i++ {
		var n, m int
		fmt.Fscanln(reader, &n, &m)
		fmt.Fprintln(writer, combi(m, n))
	}
}

func combi(m, n int) int {
	if m == n || n == 0 {
		return 1
	}
	if dp[m][n] != 0 {
		return dp[m][n]
	}
	dp[m][n] = combi(m-1, n) + combi(m-1, n-1) // ์กฐํ•ฉ์˜ ์„ฑ์งˆ, ํŒŒ์Šค์นผ์˜ ์‚ผ๊ฐํ˜• ํ™œ์šฉ.
	return dp[m][n]
}

๐ŸŽจ Python3

# https://www.acmicpc.net/problem/1010
import sys

dp = [[0]*31 for _ in range(31)]

def combi(m, n):
    if m == n or n == 0:
        return 1
    if dp[m][n] != 0:
        return dp[m][n]
    dp[m][n] = combi(m-1, n) + combi(m-1, n-1)
    return dp[m][n]

if __name__ == "__main__":
    t = int(sys.stdin.readline())
    for i in range(t):
        n, m = list(map(int, sys.stdin.readline().split()))
        print(combi(m, n))
728x90
๋Œ“๊ธ€