본문 바로가기
백준

[python] 15685. 드래곤 커브

by DylanMsK 2019. 7. 24.

문제 출처

15685. 드래곤 커브

 

풀이


N = int(input())
curves = [list(map(int, input().split())) for _ in range(N)]
arr = [[0]*101 for _ in range(101)]

directions = {
    0: (1, 0),
    1: (0, -1),
    2: (-1, 0),
    3: (0, 1)
}

def rotation(x, y, ex, ey):
    dx, dy = x-ex, y-ey
    nx, ny = ex-dy, ey+dx
    return nx, ny

while curves:
    x, y, d, g = curves.pop(0)
    arr[y][x] = 1
    gen = 0
    q = [(x, y), (x+directions[d][0], y+directions[d][1])]
    arr[q[1][1]][q[1][0]] = 1

    while gen < g:
        ex, ey = q[-1]
        nq = []
        for x, y in q[:-1][::-1]:
            nx, ny = rotation(x, y, ex, ey)
            nq.append((nx, ny))
            if nx < 0 or nx >= 101 or ny < 0 or ny >= 101:
                continue
            arr[ny][nx] = 1
        q += nq
        gen += 1

cnt = 0
for y in range(100):
    for x in range(100):
        if arr[y][x] and arr[y+1][x] and arr[y][x+1] and arr[y+1][x+1]:
            cnt += 1

print(cnt)

'백준' 카테고리의 다른 글

[python] 3190. 뱀  (0) 2019.07.24
[python] 14891. 톱니바퀴  (0) 2019.07.24
[python] 14888. 연산자 끼워넣기  (1) 2019.07.24
[python] 15683. 감시  (0) 2019.07.24
[python] 14890. 경사로  (0) 2019.07.15