1074_Z

Hongil Son·2022년 8월 14일
0

알고리즘

목록 보기
18/19

입력

N(col, row 길이), r(row), c(col)를 띄어쓰기를 기준으로 입력

출력

(r, c) 위치를 방문하는 순서를 출력

조건

  • 'Z' 방향으로 방문
  • 정사각형으로 분할하여 방문

풀이

(r, c)가 위치한 사분면을 파악하여 크기가 4인 사각형 안에 해당 좌표가 위치하는 곳을 파악
사각형을 분할하며 ans에 index값을 추가

  1. (r, c) 좌표의 크기가 4인 사각형 안의 좌표를 찾아냄

    1 사분면 -> ans+0
    2 사분면 -> ans+1개의 쿼터 사이즈 index 값
    3 사분면 -> ans+2개의 쿼터 사이즈 index 값
    4 사분면 -> ans+3개의 쿼터 사이즈 index 값

def check(half, r, c):
    quat = (2**(N*2))//4
    if r>=half and c>=half:
        r -= half
        c -= half
        ans_tmp = quat*3
    elif r>=half and c<half:
        r -= half
        ans_tmp = quat*2
    elif r<half and c>=half:
        c -= half
        ans_tmp = quat
    else: ans_tmp = 0

    return r, c, ans_tmp

while 1:
    r, c, ans_tmp = check(half, r, c)
    ans += ans_tmp
    N -= 1
    half = 2**(N-1)
    if half < 2:
        half += 1
        break
  1. 'Z' 방향으로 (r, c)의 위치를 파악
dx = [0, 1, -1, 1]
dy = [0, 0, 1, 0]

y, x = 0, 0

for idx in range(4):
    y += dy[idx]
    x += dx[idx]
    
    if y == r and x == c: break
    else: ans += 1

전체 코드

Z

profile
pushing

0개의 댓글