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
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python]๋ฐฑ์ค 1074๋ฒ : Z (0) | 2020.02.21 |
---|---|
[python]๋ฐฑ์ค 1019๋ฒ : ์ฑ ํ์ด์ง (0) | 2020.02.21 |
[python]๋ฐฑ์ค 2839๋ฒ : ์คํ ๋ฐฐ๋ฌ (0) | 2020.02.01 |
[python]๋ฐฑ์ค 9095๋ฒ : 1,2,3 ๋ํ๊ธฐ (0) | 2020.02.01 |
[python]๋ฐฑ์ค 1463๋ฒ : 1๋ก ๋ง๋ค๊ธฐ (0) | 2020.02.01 |
Comment