๋ฌธ์
https://www.acmicpc.net/problem/1074
1074๋ฒ: Z
ํ์๋ ํฌ๊ธฐ๊ฐ 2N × 2N์ธ 2์ฐจ์ ๋ฐฐ์ด์ Z๋ชจ์์ผ๋ก ํ์ํ๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 2×2๋ฐฐ์ด์ ์ผ์ชฝ ์์นธ, ์ค๋ฅธ์ชฝ ์์นธ, ์ผ์ชฝ ์๋์นธ, ์ค๋ฅธ์ชฝ ์๋์นธ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉด Z๋ชจ์์ด๋ค. N > 1์ธ ๊ฒฝ์ฐ, ๋ฐฐ์ด์
www.acmicpc.net
๋ฌธ์ ํ์ด
์ฌ๊ท๋ฅผ ์ฌ์ฉํด์ ํธ๋ ๋ฌธ์ ์ด๋ค.
์ฒ์ (2^N)*(2^N) ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์์๋ถํฐ 4์ฌ๋ถ๋ฉด์ผ๋ก ๋๋์ด ๊ธธ์ด๋ฅผ ๋ฐ์ฉ ์ค์ฌ๋๊ฐ๋ค.
๋ถํ ๋ ๋ค ๊ณต๊ฐ ์ค ( r , c )๊ฐ ์ด๋ ๊ณณ์ ์ํ๋์ง ํ์ธํ๋ค.
์ํ์ง ์๋ ๋ถ๋ถ์ ๋ํด์๋ ๊ทธ ํฌ๊ธฐ๋งํผ ans ๊ฐ์ ๋ํด์ค๋ค.
x==r ์ด๊ณ y==c ์ด๋ฉด ans๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค.
์ฝ๋
import sys
input=sys.stdin.readline
n,r,c=map(int,input().split())
ans=0
def solve(x,y,n): #x,y์์์ , ๊ฐ ๋ด๋ถ์ฌ๊ฐํ
global ans
if x==r and y==c:
print(ans)
exit(0)
if n==1:
ans+=1
return
if not (x<=r<x+n and y<=c<y+n):
ans+=n*n
return
temp=n//2
solve(x,y,temp)
solve(x,y+temp,temp)
solve(x+temp,y,temp)
solve(x+temp,y+temp,temp)
solve(0,0,2**n)
print(ans)
๊ธฐํ
๊ตฌํ ์์ฒด๋ ๊ทธ๋ค์ง ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋์์ผ๋, ์ฒ์์ ์ฌ๊ท๊ฐ ์๋๋ผ for๋ฌธ์ผ๋ก ์ง์ ๋ค ๋๋ฆฌ๋ ค๊ณ ์๋ํ์ด์ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ๋ค.
x๊ฐ r์ด๊ณ y๊ฐ c์ผ ๋, ๋ฐ๋ก ์ถ๋ ฅํ์ง ์๊ณ return์ ํด์ฃผ์์๋๋ฐ solve()์์ 4๊ฐ์ solve()๊ฐ ๋ ์๋ก ๋์๊ฐ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ถ๋ ฅ ํ ์ข ๋ฃํด์ฃผ์ด์ผ ํ๋ค.
'๐ป ์๊ณ ๋ฆฌ์ฆ > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/๋ฐฑ์ค] 20047 ๋์ ์ฎ๊ธฐ๊ธฐ - ์๋ฐ (0) | 2021.10.05 |
---|---|
[BOJ/๋ฐฑ์ค] 19538 ๋ฃจ๋จธ - ํ์ด์ฌ (0) | 2021.09.17 |
[BOJ/๋ฐฑ์ค] 14891 ํฑ๋๋ฐํด - ํ์ด์ฌ (0) | 2021.09.15 |
[BOJ/๋ฐฑ์ค] 13302 ๋ฆฌ์กฐํธ - ํ์ด์ฌ (0) | 2021.08.25 |
[BOJ/๋ฐฑ์ค] 20923 ์ซ์ ํ ๋ฆฌ๊ฐ๋ฆฌ ๊ฒ์ - ํ์ด์ฌ (0) | 2021.08.24 |