백준 문제풀이

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))

- 재귀함수