백준 문제풀이
1074 - Z (silver 1)
RonLee
2022. 8. 16. 17:45
"""
1074 - Z (silver 1)
"""
import sys
input = sys.stdin.readline
count = 0
def div_arr(x, y, n):
global count
if n == 1:
arr[x][y] = count
count += 1
else:
for p in range(2):
for q in range(2):
div_arr(x + p * n // 2, y + q * n // 2, n // 2)
n, a, b = map(int, input().split())
arr = [[0 for _ in range(2**n)] for _ in range(2**n)]
div_arr(0, 0, 2**n)
print(arr[a][b])
- 시간 초과 (오답)
"""
1074 - Z (silver 1)
"""
import sys
input = sys.stdin.readline
n, a, b = map(int, input().split())
num = 0
while n != 0:
n -= 1
# 1 사분면
if a < 2**n and b < 2**n:
num += (2**n) * (2**n) * 0
# 2 사분면
elif a < 2**n and b >= 2**n:
num += (2**n) * (2**n) * 1
b -= 2**n
# 3 사분면
elif a >= 2**n and b < 2**n:
num += (2**n) * (2**n) * 2
a -= 2**n
# 4 사분면
elif a >= 2**n and b >= 2**n:
num += (2**n) * (2**n) * 3
a -= 2**n
b -= 2**n
print(num)
- while 반복문
N, r, c = map(int, input().split())
def sol(N, r, c):
if N == 0:
return 0
return 2*(r%2)+(c%2) + 4*sol(N-1, int(r/2), int(c/2))
print(sol(N, r, c))
- 재귀함수