[BOJ 1074] Z

문지영·2023년 3월 27일
0

CODINGTEST

목록 보기
16/21

문제 1074

풀이

전형적인 재귀 문제.
2^N*2^N 차원 배열을 Z모양으로 탐색할 때, r행 c열의 방문 순서 출력
r,c은 0부터 시작

  1. 반복문이나 재귀를 이용하여 현재 위치가 몇 사분면인지 파악하고 answer 및 r,c의 값을 변경
  2. N=1, 2*2 배열이 될 때까지 반복
  3. half을 통해 배열을 4개로 나누고 2,3,4 분면이면 half*half(나누어진 4개 중 1개 안에 있는 칸의 수)만큼 answer에 더한다.

정답

N, r, c = map(int, input().split())
answer=0
while N>0:
    N-=1
    half = 2**(N) # 현재 배열을 4개로 나누기

    if r < half and c < half: # 1사분면
        answer+=0
    elif r < half and c >= half: # 2사분면
        answer += half*half
        c-=half
    elif r >= half and c < half: # 3사분면
        answer += 2*half*half
        r-=half
    else: # 4사분면
        answer += 3*half*half
        r-=half
        c-=half
print(answer)

제출

profile
BeHappy

0개의 댓글