이동방향의 규칙을 찾는 것이 중요했던 문제다
이동방향의 규칙은 최근 이동한 방향에서부터 (방향 + 1) % 4의 방향으로 진행하는 규칙이었다
따라서 처음 이동방향(d)을 move 리스트에 저장한 뒤, 세대 크기(g)만큼 for문을 돌려주며 move의 뒤에서부터 다음 이동방향을 구해주었다
소스 코드
import sys
input = sys.stdin.readline
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]
n = int(input())
board = [[0] * 101 for _ in range(101)]
for _ in range(n):
x, y, d, g = map(int, input().split())
board[x][y] = 1
move = [d]
for _ in range(g):
tmp = []
for i in range(len(move)):
tmp.append((move[-i-1] + 1) % 4)
move.extend(tmp)
for i in move:
nx = x + dx[i]
ny = y + dy[i]
board[nx][ny] = 1
x, y = nx, ny
answer = 0
for i in range(100):
for j in range(100):
if board[i][j]:
if board[i+1][j] and board[i][j+1] and board[i+1][j+1]:
answer += 1
print(answer)