Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

JH 개발 블로그

백준 파이썬 1074 Z 본문

코딩테스트/백준

백준 파이썬 1074 Z

쿠우우훈 2021. 12. 31. 11:03

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

 

1074번: Z

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을

www.acmicpc.net

N,r,c = map(int,input().split())
ans = 0

while N > 1:
    size = (2**N)//2
    if r < size and c >= size: #2사분면
       ans += size**2
       c -= size
    elif r >= size and c < size: #3사분면
        ans += 2*(size**2)
        r -= size
    elif r >= size and c >= size: #4사분면
        ans += 3*(size**2)
        r -= size
        c -= size
    N -= 1

if (r,c) == (0,0):
    print(ans)
elif (r,c) == (0,1):
    print(ans+1)
elif (r,c) == (1,0):
    print(ans+2)
else:
    print(ans+3)

 

 

한변의 길이가 2^n인 정사각형을 문제에서 4등분으로 나눈 뒤 재귀적으로 방문한다 했으므로

그대로 4등분으로 나누고, 몇사분면에 위치하는지 구해서 ans에 (size**2) 값을 몇번 더해줄지 정하고

r,c의 위치를 2사분면에 오도록 조정해주는 작업을 재귀적으로 반복하면 된다.

만약 N == 1이 되면 지금까지 구한 ans에 0,1,2,3 중 하나를 더해주면 된다.

Comments