알고리즘/백준

[백준] 1074. Z

빙빙 2021. 3. 7. 22:01

코드 알고리즘

1.계속해서 4분할을 한다

2.길이가 2가 되면 더이상 분할할 수 없기 때문에 여기서 작은 사각형에서 왼쪽위->오른쪽위->왼쪽아래->오른쪽아래 (Z모양 순서)순서로 cnt +=1 해주며 찾아준다.


cnt = 0
def func(a,x,y):
    global cnt
    if a == 2:
        if x == r and y == c: #왼쪽 위
            print(cnt)
            return
        cnt += 1
        if x == r and y + 1 == c: #오른쪽 위
            print(cnt)
            return
        cnt += 1
        if x+1 == r and y == c: # 왼쪽아래
            print(cnt)
            return
        cnt += 1
        if x+1 == r and y+1 == c: #오른쪽 아래
            print(cnt)
            return
        cnt += 1
    else:
        func(a//2, x, y)# 첫번째 사각형(왼쪽 위)
        func(a//2,x, y + a//2) #두번째 (오른쪽 위)
        func(a // 2, x + a //2, y )  # 세번째(왼쪽 아래)
        func(a // 2, x + a // 2, y + a // 2)  # 네번째 (오른쪽 아래)




N, r, c = map(int,input().split())
num = 2**N #num은 한변의 길이
func(num,0,0)
#좌표 r,c에 있는 cnt수를 출력해야한다.