๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Class3] 1074๋ฒˆ_Z

Dbswnstjd 2022. 11. 7. 02:24

๋ฌธ์ œ

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

 

1074๋ฒˆ: Z

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

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 1074๋ฒˆ ๋ฌธ์ œ - Z
N, r, c = map(int, input().split())
cnt = 0

while N > 1:
    size = (2 ** N) // 2
    if r < size and c < size: # 2์‚ฌ๋ถ„๋ฉด
        pass
    elif r < size and c >= size: # 1์‚ฌ๋ถ„๋ฉด
        cnt += size ** 2
        c -= size
    elif r >= size and c < size: # 3์‚ฌ๋ถ„๋ฉด
        cnt += size ** 2 * 2
        r -= size
    elif r >= size and c >= size: # 4์‚ฌ๋ถ„๋ฉด
        cnt += size ** 2 * 3
        r -= size
        c -= size
    N -= 1

if r == 0 and c == 0:
    print(cnt)
if r == 0 and c == 1:
    print(cnt + 1)
if r == 1 and c == 0:
    print(cnt + 2)
if r == 1 and c == 1:
    print(cnt + 3)

๋ถ„ํ• ์ •๋ณต ๋ฌธ์ œ

 

์ž๊พธ ํ—ท๊ฐˆ๋ ค์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌ๋ฅผ ํ•˜์˜€๋‹ค.

# ๋ฐฑ์ค€ 1074๋ฒˆ ๋ฌธ์ œ - Z
import sys
n, r, c = map(int, input().split())
def z(n,r,c,q):
    if n == 0:
        return q
    half = 2**(n-1) # ํ•œ ๋ณ€์˜ ์ ˆ๋ฐ˜ ๊ธธ์ด
    if r < half: # 1์‚ฌ๋ถ„๋ฉด
        if c < half: # 1์‚ฌ๋ถ„๋ฉด
            quad = 0
        else: # 2์‚ฌ๋ถ„๋ฉด
            # ์•ž์— 1๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์ด ์กด์žฌ 
            quad = 1
            # ๋นผ์ฃผ๋Š” ์ด์œ ๋Š” 2์‚ฌ๋ถ„๋ฉด์ด 1์‚ฌ๋ถ„๋ฉด์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— 2์‚ฌ๋ถ„๋ฉด์ด๋ฉด
            # ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— (2**(n-1)์ด๋™)์ด๋™ํ•˜๋Š” ๋งŒํผ ๋นผ์ค€๋‹ค.
            c -= half 
    else:
        if c < half: # 3์‚ฌ๋ถ„๋ฉด
            # ์•ž์— 2๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์ด ์กด์žฌ
            quad = 2
            # 3์‚ฌ๋ถ„๋ฉด์€ ์œ„๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ–‰(r)์„ ๋นผ์ค€๋‹ค. 
            r -= half
        else: # 4์‚ฌ๋ถ„๋ฉด
            # ์•ž์— 3๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ
            quad = 3
            # 4์‚ฌ๋ถ„๋ฉด์€ ์™ผ์ชฝ, ์œ„๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ–‰(r), ์—ด(c)๋ฅผ ๋นผ์ค€๋‹ค.
            r -= half
            c -= half
    # ์•ž์— ์กด์žฌํ•˜๋Š” ์‚ฌ๊ฐํ˜• * (๊ฐœ์ˆ˜)
    q += (quad) * half**2
    return (z(n-1,r,c,q))

print(z(n,r,c,0))