출처 : https://www.acmicpc.net/problem/15685
In [19]:
if __name__ == '__main__':
N = int(input())
board = [[0]*101 for _ in range(101)] # 드래곤 커브가 지나간 곳은 1, 아니면 0
dx = (0, -1, 0, 1)
dy = (1, 0, -1, 0)
for _ in range(N): # 서로 다른 드래곤 커브가 N개 있음
y, x, d, g = map(int, input().split())
total_array = [(x, y), (x+dx[d], y+dy[d])]
board[x][y] = 1
board[x+dx[d]][y+dy[d]] = 1
for generation in range(g): # g번의 세대에 걸쳐서 드래곤 커브를 확장한다.
add_array = [] # 새로 추가될 좌표
lx, ly = total_array[-1][0], total_array[-1][1] # 기준점
for px, py in total_array[len(total_array)-2::-1]:
nx = lx - (ly - py)
ny = ly + (lx - px)
## 맵을 벗어나는가?
if not(0 <= nx <= 100 and 0 <= ny <= 100): break
board[nx][ny] = 1 # board 업데이트 (드래곤 커브가 지나가는 곳이다.)
add_array.append((nx, ny))
## 원래 드래곤 커브에다가 새로 생긴 드래곤 커브를 더한다.
total_array.extend(add_array)
add_array.clear()
cnt = 0
for i in range(100):
for j in range(100):
if not(board[i][j]==1): continue
if not(board[i][j+1]==1): continue
if not(board[i+1][j]==1): continue
if board[i+1][j+1]==1: cnt = cnt + 1
print(cnt)
'알고리즘 > [Python] 백준' 카테고리의 다른 글
(Python) 백준 2161번: 카드 1 (0) | 2020.02.20 |
---|---|
(Python) 백준 5532번: 방학 숙제 (0) | 2020.02.20 |
(Python) 백준 1120번 : 문자열 (0) | 2020.02.19 |
(Python) 백준 14890번 : 경사로 (0) | 2020.02.19 |
(Python) 백준 2164번 : 카드2 (0) | 2020.02.18 |