문제
https://www.acmicpc.net/problem/21610
마법사 상어와 파이어 볼을 풀고 심심해서 풀어봤는데, 단순한 구현 문제였다. 문제에서 말하는 조건만 잘 지키면 된다.
파이어 볼 때랑 비슷하게 체크해야 될 부분은 N행 또는 N열을 넘으면 다시 첫번째 열과 행으로 올 수 있으니까 나머지를 계산해서 바꿔 주면 된다.
소스코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
dy = [0, -1, -1, -1, 0, 1, 1, 1]
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
di_y = [-1, -1, 1, 1]
di_x = [-1, 1, 1, -1]
cloud = []
arr = [[0 for _ in range(N)] for _ in range(N)]
for i in range(N):
arr[i] = list(map(int, input().split()))
cmd = []
for _ in range(M):
d, len = map(int, input().split())
cmd.append([d-1, len])
cloud.append([N-1, 0])
cloud.append([N-1, 1])
cloud.append([N-2, 0])
cloud.append([N-2, 1])
for dir in range(M):
ch = [[0]*N for _ in range(N)]
moved = []
while cloud:
y, x = cloud.pop(0)
yy = (y+dy[cmd[dir][0]]*cmd[dir][1]) % N
xx = (x+dx[cmd[dir][0]]*cmd[dir][1]) % N
ch[yy][xx] = 1
arr[yy][xx] += 1
moved.append([yy, xx])
for mv in moved:
y = mv[0]
x = mv[1]
for d in range(4):
yy = y+di_y[d]
xx = x+di_x[d]
if yy < 0 or xx < 0 or yy >= N or xx >= N:
continue
if arr[yy][xx] != 0:
arr[y][x] += 1
for i in range(N):
for j in range(N):
if ch[i][j] != 1 and arr[i][j] >= 2:
cloud.append([i, j])
arr[i][j] -= 2
ans = 0
for i in range(N):
for j in range(N):
ans += arr[i][j]
print(ans)
'TIL' 카테고리의 다른 글
프로그래머스 풍선 터트리기 (0) | 2021.12.31 |
---|---|
백준 합분해 2 13707 (c++) (0) | 2021.12.08 |
Red–black tree (4) | 2021.09.07 |
백준 2098 외판원 순회(python) (1) | 2021.08.30 |
백준 22239 가희와 읽기 쓰기 놀이2(python) (1) | 2021.08.28 |