만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/기억노트

[python] 진행 방향 시계,반시계 방향 꺾기 돌리기

D36choi 2020. 9. 1. 14:13
728x90

백준 3190번 뱀 문제에서는 스네이크 게임을 진행하기 위해

뱀의 머리의 방향을 바꾸는 경우가 있다. 기본 값은 오른방향이다. (3시방향)

 

 

2차원 배열로 오른쪽 진행 방향은 [0,1] 이 되겠고, 이상태로 시계와 반시계 방향으로 머리의 진행방향은 바뀔 수 있다.

 

move = [[0,1],[1,0],[0,-1],[-1,0]]
direction = 0

if commands == 'L': # command 가 L 이면 반시계방향 회전
direction = (direction - 1) % 4
elif commands == 'D': # command 가 D 이면 시계방향 회전
direction = (direction + 1) % 4

index 0 -> 4 방향으로 증가할 경우 이 move의 방향은 반시계방향으로 회전한다.

index 0 <- 4 방향으로 감소할 경우 이 move의 방향은 시계방향으로 회전한다.

 

만약 단순히 증감 연산으로 방향처리를 하려면 index 0 에서 index 3로 가는 경우를 따로 예외처리를 해줘야 한다.

 

idx 0 (3시방향) -> idx 3 (12시방향) = 반시계회전

index -1 은 없으니까.

 

하지만 이처럼 modulo 연산을 통해 2차원 배열 기준 4방향 회전 (즉, 대각선은 안된다) 이기 때문에 4만큼의 나머지 연산을 해주면 0~3 까지의 시계반시계방향 계산이 편해진다.