https://www.acmicpc.net/problem/21610
문제 해결을 위한 과정
구현 유형에 해당하는 문제 이므로 문제에서 주어진 조건을 따라서 차분하게 작성하면 어렵지 않게 풀 수 있는 문제 입니다. 문제의 예시를 보고 한 단계씩 확인하면서 작성하여 크게 어렵지 않게 해결할 수 있었습니다.
소스코드
n, m = map(int, input().split())
dx = [0, -1, -1, -1, 0, 1, 1, 1]
dy = [-1, -1, 0, 1, 1, 1, 0, -1]
graph = []
for _ in range(n):
graph.append(list(map(int, input().split())))
moves = []
for _ in range(m):
x, y = map(int, input().split())
moves.append((x-1, y))
cloud = [(n-1, 0), (n-1, 1), (n-2, 0), (n-2, 1)]
def move_cloud(d, s):
length = len(cloud)
for i in range(length):
x, y = cloud[0]
cloud.pop(0)
nx = x + dx[d] * s
ny = y + dy[d] * s
nx = nx % n
ny = ny % n
cloud.append((nx, ny))
for i in range(len(moves)):
d, s = moves[i]
move_cloud(d, s)
for j in range(len(cloud)):
x, y = cloud[j]
graph[x][y] += 1
for j in range(len(cloud)):
x, y = cloud[j]
count = 0
for k in range(1, 8, 2):
nx = x + dx[k]
ny = y + dy[k]
if nx < 0 or ny < 0 or nx >= n or ny >= n:
continue
if graph[nx][ny] >= 1:
count += 1
graph[x][y] += count
tempCloud = []
for a in range(n):
for b in range(n):
if graph[a][b] >= 2 and (a, b) not in cloud:
tempCloud.append((a, b))
cloud.clear()
for j in range(len(tempCloud)):
x, y = tempCloud[j]
cloud.append((x, y))
graph[x][y] -= 2
ans = 0
for i in range(n):
for j in range(n):
ans += graph[i][j]
print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
백준 14891번: 톱니바퀴 (Python) (0) | 2024.04.04 |
---|---|
백준 21608번: 상어 초등학교(Python) (0) | 2024.04.03 |
백준 1238번: 파티(Python, cpp) (0) | 2022.02.27 |
백준 1753번: 최단경로(Python, cpp) (0) | 2022.02.22 |
백준 12100번: 2048(Python, cpp) (0) | 2022.02.21 |