[๋ฐฑ์ค€-1074] Z / Python

๐Ÿ“š Problem Solving/Baekjoon

 

1074๋ฒˆ: Z

ํ•œ์ˆ˜๋Š” ํฌ๊ธฐ๊ฐ€ 2N × 2N์ธ 2์ฐจ์› ๋ฐฐ์—ด์„ Z๋ชจ์–‘์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 2×2๋ฐฐ์—ด์„ ์™ผ์ชฝ ์œ„์นธ, ์˜ค๋ฅธ์ชฝ ์œ„์นธ, ์™ผ์ชฝ ์•„๋ž˜์นธ, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์นธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉด Z๋ชจ์–‘์ด๋‹ค. ๋งŒ์•ฝ, N > 1์ด ๋ผ์„œ

www.acmicpc.net

def z(n, x, y):
    global answer
    if x == r and y == c:
        print(int(answer))
        exit(0)
    if n == 1:
        answer += 1
        return
    if not (x <= r < x + n and y <= c < y + n):
        answer += n ** 2
        return
    z(n / 2, x, y)
    z(n / 2, x, y + n / 2)
    z(n / 2, x + n / 2, y)
    z(n / 2, x + n / 2, y + n / 2)


n, r, c = map(int, input().split())
answer = 0
z(2 ** n, 0, 0)

 

ํ•ด์„ค

์žฌ๊ท€์— ์ž์‹ ์ด ์—†๋Š”๋ฐ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋‹ˆ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ฃผ์–ด์ง„ ํฌ๊ธฐ์—์„œ 4๋“ฑ๋ถ„์œผ๋กœ ๊ณ„์† ์ชผ๊ฐœ์ฃผ๋ฉด์„œ r๊ณผ c๊ฐ€ ๋“ฑ๋ถ„ํ•œ ์‚ฌ๊ฐํ˜• ์•ˆ์— ์—†์œผ๋ฉด ์‚ฌ๊ฐํ˜•์˜ ๋„“์ด๋งŒํผ ๋”ํ•ด์ค€๋‹ค.