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 까지의 시계반시계방향 계산이 편해진다.
'프로그래밍 > 기억노트' 카테고리의 다른 글
[python] list 여러 조건으로 정렬하기 (sort by multiple field,attribute) (0) | 2020.09.11 |
---|---|
[intelliJ] 인텔리제이 다중 커서 (multi-cursor) (1) | 2020.09.04 |
[python] 2차원 리스트 90도 돌리기 (0) | 2020.08.31 |
[python] 주어진 수가 소수인지 판별하기 (0) | 2020.08.26 |
[python] sort 를 할 때 2개의 key 를 서로 다른 순서로 정렬하기 (2 key 2 order) (0) | 2020.08.25 |