๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปAlgorithm/PS

[BOJ/๋ฐฑ์ค€] 1074 Z - ํŒŒ์ด์ฌ

๋ฌธ์ œ

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()๊ฐ€ ๋˜ ์ƒˆ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์ถœ๋ ฅ ํ›„ ์ข…๋ฃŒํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.