처음에는 모든 드래곤들을 순회하면서, 드래곤의 처음 위치와 방향을 기준으로 세대만큼 시계 방향으로 90도 회전해서 board에 표시를 해주는 방식으로 구현하려 했으나 구현 방법이 막막해서 실패함
구글링을 해본 결과 드래곤 커브의 규칙이 존재함을 확인함
만약 처음 시작 방향이 0이라면,
-> 0세대: 0
-> 1세대: 0 1
-> 2세대: 0 1 2 1
-> 3세대: 0 1 2 1 2 3 2 1
-> 4세대: 0 1 2 1 2 3 2 1 2 3 0 3 2 3 2 1
의 방향을 갖음
(curve[-j-1] + 1) % 4
위의 형식으로 드래곤 마다 curve (드래곤의 방향을 담은 list)를 구할 수가 있음
-> 해당 list를 통해 board에 드래곤의 위치를 표시
모든 드래곤을 board에 표시한 후, 2중 for문을 돌면서 정사각형의 개수를 구함
import sys
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, sys.stdin.readline()[:-1].split())
board[x][y] = 1
curve = [d] #드래곤커브의 방향 저장
for i in range(g):
tmp = []
for j in range(len(curve)):
tmp.append((curve[-j-1] + 1) % 4)
curve.extend(tmp)
for c in curve: #board에 드래곤의 위치 표시
nx = x + dx[c]; ny = y + dy[c]
board[nx][ny] = 1
x, y = nx, ny
#정사각형 개수 구하기
result = 0
for i in range(100):
for j in range(100):
if board[i][j] and board[i+1][j] and board[i][j+1] and board[i+1][j+1]:
result += 1
print(result)