[python]๋ฐฑ์ค€ 4811๋ฒˆ : ์•Œ์•ฝ

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

๋ฌธ์ œ

70์„ธ ๋ฐ•์ข…์ˆ˜ ํ• ์•„๋ฒ„์ง€๋Š” ๋งค์ผ ๋งค์ผ ์•ฝ ๋ฐ˜์•Œ์„ ๋จน๋Š”๋‹ค. ์†๋…€ ์„ ์˜์ด๋Š” ์ข…์ˆ˜ ํ• ์•„๋ฒ„์ง€์—๊ฒŒ ์•ฝ์ด N๊ฐœ ๋‹ด๊ธด ๋ณ‘์„ ์„ ๋ฌผ๋กœ ์ฃผ์—ˆ๋‹ค.

์ฒซ์งธ ๋‚ ์— ์ข…์ˆ˜๋Š” ๋ณ‘์—์„œ ์•ฝ ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ธ๋‹ค. ๊ทธ ๋‹ค์Œ, ๊ทธ ์•ฝ์„ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐœ์„œ ํ•œ ์กฐ๊ฐ์€ ๋จน๊ณ , ๋‹ค๋ฅธ ์กฐ๊ฐ์€ ๋‹ค์‹œ ๋ณ‘์— ๋„ฃ๋Š”๋‹ค.

๋‹ค์Œ ๋‚ ๋ถ€ํ„ฐ ์ข…์ˆ˜๋Š” ๋ณ‘์—์„œ ์•ฝ์„ ํ•˜๋‚˜ ๊บผ๋‚ธ๋‹ค. (์•ฝ์€ ํ•œ ์กฐ๊ฐ ์ „์ฒด ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์ชผ๊ฐ  ๋ฐ˜ ์กฐ๊ฐ ์ผ ์ˆ˜๋„ ์žˆ๋‹ค) ๋ฐ˜ ์กฐ๊ฐ์ด๋ผ๋ฉด ๊ทธ ์•ฝ์„ ๋จน๊ณ , ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ˜์„ ์ชผ๊ฐœ์„œ ํ•œ ์กฐ๊ฐ์„ ๋จน๊ณ , ๋‹ค๋ฅธ ์กฐ๊ฐ์€ ๋‹ค์‹œ ๋ณ‘์— ๋„ฃ๋Š”๋‹ค.

์ข…์ˆ˜๋Š” ์†๋…€์—๊ฒŒ ํ•œ ์กฐ๊ฐ์„ ๊บผ๋‚ธ ๋‚ ์—๋Š” W๋ฅผ, ๋ฐ˜ ์กฐ๊ฐ์„ ๊บผ๋‚ธ ๋‚ ์—๋Š” H ๋ณด๋‚ธ๋‹ค. ์†๋…€๋Š” ํ• ์•„๋ฒ„์ง€์—๊ฒŒ ๋ฐ›์€ ๋ฌธ์ž๋ฅผ ์ข…์ด์— ๊ธฐ๋กํ•ด ๋†“๋Š”๋‹ค. ์ด 2N์ผ์ด ์ง€๋‚˜๋ฉด ๊ธธ์ด๊ฐ€ 2N์ธ ๋ฌธ์ž์—ด์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ, ๊ฐ€๋Šฅํ•œ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋Š” ์ด ๋ช‡ ๊ฐœ์ผ๊นŒ?

์ž…๋ ฅ

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

์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” 0์ด ํ•˜๋‚˜ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋‚˜์˜ ๋‹ต

์ˆœ์—ด

W(์•Œ์•ฝ ํ•˜๋‚˜)๊ฐ€ ํ•˜๋‚˜ ๋‚˜์˜ค๋ฉด ๋ฌด์กฐ๊ฑด H(์•Œ์•ฝ ๋ฐ˜ ๊ฐœ)๊ฐ€ ๋’ค์— ํ•˜๋‚˜ ๋‚˜์™€์•ผ ํ•จ

์ฒ˜์Œ์—๋Š” W๋กœ ์‹œ์ž‘

๊ธธ์ด๋Š” ๊ณ ์ •์œผ๋กœ 2N

W๊ฐ€ N๊ฐœ, H๊ฐ€ N๊ฐœ์ธ๋ฐ W์˜ ๊ฐฏ์ˆ˜๋ณด๋‹ค H์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•ด์„œ๋Š” ์•ˆ๋จ

=> ์ˆœ์—ด๋กœ ํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๋ณต์žกํ•จ

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌ์„ฑ

2020-04-19์— ์ˆ˜์ •๋˜์—ˆ์Œ

<1์•ˆ>

func(2N-1,W,H)
    if(2N-1์ด 1์ด๋ฉด) // ๋งˆ์ง€๋ง‰์€ ์–ด์ฐจํ”ผ H
        count++;
        return
    if(W๊ฐ€ N-1์ด๋ฉด) // ๋‚˜๋จธ์ง€๋Š” ์–ด์ฐจํ”ผ H์ด๋ฏ€๋กœ
        count++;
        return
    if(W>H)
        func(2N-2,W+1,H)
        func(2N-2,W,H+1)
    else
        func(2n-2,W+1,H)

 ํ•œ ์•Œ์„ ๋จน์œผ๋ฉด W๋ฅผ ๋Š˜๋ฆฌ๊ณ  ๋ฐ˜ ์•Œ์„ ๋จน์œผ๋ฉด H๋ฅผ ๋Š˜๋ฆฐ๋‹ค. W๋ณด๋‹ค H๊ฐ€ ์ปค์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋‘˜์ด ๊ฐ™์„ ๊ฒฝ์šฐ W๋ฅผ ๋Š˜๋ฆฌ๊ฒŒ ์žฌ๊ท€๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , W๊ฐ€ ํฐ ๊ฒฝ์šฐ W๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒฝ์šฐ์™€ H๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒฝ์šฐ ๊ฐ๊ฐ์„ ํ˜ธ์ถœํ•œ๋‹ค.

 ์ด๋ ‡๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌ์„ฑํ•˜๋ฉด 2N-2๋ฒˆ ์žฌ๊ท€๋ฅผ ํƒ€๋ฏ€๋กœ 2^59 = ์•ฝ 10^18์˜ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ์ด๋‹ค.

์–ด๋–ป๊ฒŒ DP๋ฅผ ๊ตฌํ˜„ํ• ๊นŒ ์ƒ๊ฐํ•ด๋ณด๋‹ค๊ฐ€ ์–ผ๋งˆ ์ „ ํ’€์—ˆ๋˜ ๋ฌธ์ œ์˜ ๋ฐฉ๋ฒ•์ด ๋– ์˜ฌ๋ผ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

 

<2์•ˆ>

 ์ด๋ ‡๊ฒŒ H์™€ W๋ฅผ ๋ฐฐ์—ด๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด a์ฒ˜๋Ÿผ ์ฒ˜์Œ์—๋Š” W๊ฐ€ 1์ด๊ณ  H๊ฐ€ 0์ผ ๋•Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค(์ฒซ ๋‚ ์—๋Š” ๋ฌด์กฐ๊ฑด ํ•œ ์•Œ์„ ๊บผ๋‚ด์•ผ ํ•˜๋ฏ€๋กœ W๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘). b๋ฅผ ๋ณด๋ฉด W๊ฐ€ H๋ณด๋‹ค ๋งŽ์œผ๋ฉด ํ•œ ์•Œ์„ ๊บผ๋‚ด๊ฑฐ๋‚˜ ๋ฐ˜ ์•Œ์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐฐ์—ด์—์„œ ์˜ค๋ฅธ์ชฝ๊ณผ ์•„๋ž˜๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. c์—์„œ ๋ณด์—ฌ์ง€๋“ฏ์ด W๊ฐ€ H์™€ ๊ฐ™์œผ๋ฉด ๋ฌด์กฐ๊ฑด ํ•œ ์•Œ์„ ๊บผ๋‚ด์•ผ ํ•˜๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 ์ด๋Ÿฐ ์‹์œผ๋กœ H ํ–‰ ๊ฐฏ์ˆ˜๋งŒํผ for๋ฌธ์„ ๋Œ๋ฆฌ๊ณ  ๊ทธ ์•ˆ์—์„œ W ์—ด ๊ฐฏ์ˆ˜๋งŒํผ for๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ๊ฐ๊ฐ์˜ ๋ฐฉํ–ฅ์— ํ˜„์žฌ์˜ ๊ฐ’์„ ๋”ํ•ด์ฃผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ฆผ์ด ์™„์„ฑ๋œ๋‹ค.

 

 ๋”ฐ๋ผ์„œ N์ด 4์ผ๋•Œ์˜ ๋‹ต์€ 14์ด๋‹ค. testcase๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ด๋ฏ€๋กœ ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•ด๋‘๋ฉด ๊ณ„์† ์ด ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๋‹ต์„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. N์ด 3์ผ ๋•Œ๋Š” ์œ„์˜ ๊ทธ๋ฆผ์—์„œ (3,3) ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” 5๊ฐ€ ๋‹ต์ด๋‹ค.

 ์ด๋ ‡๊ฒŒ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•œ๊ฒƒ์€ ์‚ฌ์‹ค ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๊ณณ์„ map์ด๋ผ๊ณ  ๋ดค์„ ๋•Œ, (0,1)์—์„œ (N,N)๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ๊ฐฏ์ˆ˜์ด๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ด์ค‘ for๋ฌธ์˜ ๊ฐฏ์ˆ˜๋งŒํผ ์ด๋ฏ€๋กœ N^2์ด๋‹ค.

์ตœ๋Œ€ 9*10^2

 

๋‹ค๋ฅธ ๋‹ต

  • ์ผ์ • ๊ทœ์น™์ด ์žˆ์œผ๋ฏ€๋กœ ๋ฐฉ์ •์‹์„ ์ด์šฉํ•œ ํ’€์ด๋„ ์ž˜ ์ƒ๊ฐํ•˜๋ฉด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
input_list = list()

while(1):
    n = int(input())
    if n:
        input_list.append(n)
    else:
        for tmp in input_list:
            r=1
            for n in range(2*tmp,tmp,-1):
                r*=n
            for n in range(1,tmp+2):
                r //=n
            print(r)
        break
  • W์™€ H๋ฅผ ํ˜„์žฌ ๋‚จ์•„์žˆ๋Š” ์•Œ์•ฝ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์™„์ „ํƒ์ƒ‰ + DP

    W๊ฐ€ ์žˆ์œผ๋ฉด W๋ฅผ 1์ค„์ด๊ณ  H๋ฅผ 1๋Š˜๋ฆฌ๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ

    H๊ฐ€ ์žˆ์œผ๋ฉด H๋ฅผ 1์ค„์ด๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ

    ์ด๋ž˜๋„ ์žฌ๊ท€๊ฐ€ ์ตœ๋Œ€ 10^9๋ผ์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ ๊ฐ™์€๋ฐ ์•ˆ๋‚˜์˜ค๋‚˜๋ณด๋‹ค ใ…‡ใ……ใ…‡

    http://blog.naver.com/PostView.nhn?blogId=jhc9639&logNo=221801894374

๋ฐ˜์‘ํ˜•