๋ฌธ์
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))
'๐๏ธ Algorithm > ๐ฉ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฉ [๋ฐฑ์ค] [Python] 1629๋ฒ_๊ณฑ์ (0) | 2022.11.07 |
---|---|
๐ฉ [๋ฐฑ์ค] [Python] 1182๋ฒ_๋ถ๋ถ์์ด์ ํฉ (0) | 2022.11.07 |
๐ฉ [๋ฐฑ์ค] [Python] [Class3] 18870๋ฒ_์ขํ ์์ถ (0) | 2022.11.07 |
๐ฉ [๋ฐฑ์ค] [Python] [Class3] 11724๋ฒ_์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2022.11.07 |
๐ฉ [๋ฐฑ์ค] [Python] [Class3] 1927๋ฒ_์ต๋ ํ (0) | 2022.11.07 |