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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

4811๋ฒˆ: ์•Œ์•ฝ

์ž…๋ ฅ์€ ์ตœ๋Œ€ 1000๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„์ด๋ฉฐ, ๋ณ‘์— ๋“ค์–ด์žˆ๋Š” ์•ฝ์˜ ๊ฐœ์ˆ˜ N ≤ 30 ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” 0์ด ํ•˜๋‚˜ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

  N๊ฐœ์˜ ์•ฝ์ด ๋‹ด๊ธด ๋ณ‘์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ฒซ์งธ ๋‚ ์—๋Š” ์•ฝ์„ ๊บผ๋‚ด์„œ ๋ฐ˜ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆˆ ํ›„ ๋ฐ˜์€ ๋จน๊ณ  ๋ฐ˜์€ ๋‹ค๋ฅธ ๋ณ‘์— ๋„ฃ๋Š”๋‹ค. ๊ทธ๋‹ค์Œ ๋‚ ์—๋Š” ์•ฝ์„ ๊บผ๋‚ด์„œ ๋ฐ˜ ์กฐ๊ฐ์ด๋ฉด ๋จน๊ณ , ๋ฐ˜ ์กฐ๊ฐ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ˜์„ ์ชผ๊ฐœ์„œ ๋จน์€ ํ›„ ๋‚จ์€ ๊ฒƒ์€ ๋‹ค๋ฅธ ๋ณ‘์— ๋„ฃ๋Š”๋‹ค. ํ•œ ์กฐ๊ฐ์„ ๊บผ๋‚ธ๋‚ ์—๋Š” W, ๋ฐ˜ ์กฐ๊ฐ์„ ๊บผ๋‚ธ ๋‚ ์—๋Š” H์ผ ๋•Œ 2N์ผ ํ›„์— ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋Š” DFS๋ฅผ ํ†ตํ•ด ๋ฐ˜ ์กฐ๊ฐ์ด ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ํ˜ธ์ถœํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


def dfs(w, h):

    if dp[w][h]:
        return dp[w][h]

    if w == 0:
        return 1

    dp[w][h] = dfs(w - 1, h + 1)

    if h > 0:
        dp[w][h] += dfs(w, h - 1)

    return dp[w][h]


if __name__ == '__main__':
    dp = [[0] * 31 for _ in range(31)]

    while True:
        n = int(stdin.readline())

        if n == 0:
            break

        print(dfs(n, 0))
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€