์ผ์ฑ SW ์ญ๋ ํ ์คํธ ๊ธฐ์ถ ๋ฌธ์ - 21610๋ฒ ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ
๋ฌธ์
๋ง๋ฒ์ฌ ์์ด๋ ํ์ด์ด๋ณผ, ํ ๋ค์ด๋, ํ์ด์ด์คํฐ, ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ํ ์ ์๋ค. ์ค๋ ์๋ก ๋ฐฐ์ด ๋ง๋ฒ์ ๋น๋ฐ๋ผ๊ธฐ์ด๋ค. ๋น๋ฐ๋ผ๊ธฐ๋ฅผ ์์ ํ๋ฉด ํ๋์ ๋น๊ตฌ๋ฆ์ ๋ง๋ค ์ ์๋ค. ์ค๋์ ๋น๋ฐ๋ผ๊ธฐ๋ฅผ ํฌ๊ธฐ๊ฐ N×N์ธ ๊ฒฉ์์์ ์ฐ์ตํ๋ ค๊ณ ํ๋ค. ๊ฒฉ์์ ๊ฐ ์นธ์๋ ๋ฐ๊ตฌ๋๊ฐ ํ๋ ์๊ณ , ๋ฐ๊ตฌ๋๋ ์นธ ์ ์ฒด๋ฅผ ์ฐจ์งํ๋ค. ๋ฐ๊ตฌ๋์ ์ ์ฅํ ์ ์๋ ๋ฌผ์ ์์๋ ์ ํ์ด ์๋ค. (r, c)๋ ๊ฒฉ์์ rํ c์ด์ ์๋ ๋ฐ๊ตฌ๋๋ฅผ ์๋ฏธํ๊ณ , A[r][c]๋ (r, c)์ ์๋ ๋ฐ๊ตฌ๋์ ์ ์ฅ๋์ด ์๋ ๋ฌผ์ ์์ ์๋ฏธํ๋ค.
๊ฒฉ์์ ๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์ (1, 1)์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ซ ์นธ์ (N, N)์ด๋ค. ๋ง๋ฒ์ฌ ์์ด๋ ์ฐ์ต์ ์ํด 1๋ฒ ํ๊ณผ N๋ฒ ํ์ ์ฐ๊ฒฐํ๊ณ , 1๋ฒ ์ด๊ณผ N๋ฒ ์ด๋ ์ฐ๊ฒฐํ๋ค. ์ฆ, N๋ฒ ํ์ ์๋์๋ 1๋ฒ ํ์ด, 1๋ฒ ํ์ ์์๋ N๋ฒ ํ์ด ์๊ณ , 1๋ฒ ์ด์ ์ผ์ชฝ์๋ N๋ฒ ์ด์ด, N๋ฒ ์ด์ ์ค๋ฅธ์ชฝ์๋ 1๋ฒ ์ด์ด ์๋ค.
๋น๋ฐ๋ผ๊ธฐ๋ฅผ ์์ ํ๋ฉด (N, 1), (N, 2), (N-1, 1), (N-1, 2)์ ๋น๊ตฌ๋ฆ์ด ์๊ธด๋ค. ๊ตฌ๋ฆ์ ์นธ ์ ์ฒด๋ฅผ ์ฐจ์งํ๋ค. ์ด์ ๊ตฌ๋ฆ์ ์ด๋์ M๋ฒ ๋ช ๋ นํ๋ ค๊ณ ํ๋ค. i๋ฒ์งธ ์ด๋ ๋ช ๋ น์ ๋ฐฉํฅ di๊ณผ ๊ฑฐ๋ฆฌ si๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ฐฉํฅ์ ์ด 8๊ฐ์ ๋ฐฉํฅ์ด ์์ผ๋ฉฐ, 8๊ฐ์ ์ ์๋ก ํํํ๋ค. 1๋ถํฐ ์์๋๋ก ←, โ, ↑, โ, →, โ, ↓, โ ์ด๋ค. ์ด๋์ ๋ช ๋ นํ๋ฉด ๋ค์์ด ์์๋๋ก ์งํ๋๋ค.
- ๋ชจ๋ ๊ตฌ๋ฆ์ด di ๋ฐฉํฅ์ผ๋ก si์นธ ์ด๋ํ๋ค.
- ๊ฐ ๊ตฌ๋ฆ์์ ๋น๊ฐ ๋ด๋ ค ๊ตฌ๋ฆ์ด ์๋ ์นธ์ ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 1 ์ฆ๊ฐํ๋ค.
- ๊ตฌ๋ฆ์ด ๋ชจ๋ ์ฌ๋ผ์ง๋ค.
- 2์์ ๋ฌผ์ด ์ฆ๊ฐํ ์นธ (r, c)์ ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ์์ ํ๋ค. ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ์ฌ์ฉํ๋ฉด, ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ์นธ์ ๋ฌผ์ด ์๋ ๋ฐ๊ตฌ๋์ ์๋งํผ (r, c)์ ์๋ ๋ฐ๊ตฌ๋์ ๋ฌผ์ด ์์ด ์ฆ๊ฐํ๋ค.
- ์ด๋๋ ์ด๋๊ณผ ๋ค๋ฅด๊ฒ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ ์นธ์ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ์นธ์ด ์๋๋ค.
- ์๋ฅผ ๋ค์ด, (N, 2)์์ ์ธ์ ํ ๋๊ฐ์ ์นธ์ (N-1, 1), (N-1, 3)์ด๊ณ , (N, N)์์ ์ธ์ ํ ๋๊ฐ์ ์นธ์ (N-1, N-1)๋ฟ์ด๋ค.
- ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 2 ์ด์์ธ ๋ชจ๋ ์นธ์ ๊ตฌ๋ฆ์ด ์๊ธฐ๊ณ , ๋ฌผ์ ์์ด 2 ์ค์ด๋ ๋ค. ์ด๋ ๊ตฌ๋ฆ์ด ์๊ธฐ๋ ์นธ์ 3์์ ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ์ด ์๋์ด์ผ ํ๋ค.
M๋ฒ์ ์ด๋์ด ๋ชจ๋ ๋๋ ํ ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, M์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ N๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. r๋ฒ์งธ ํ์ c๋ฒ์งธ ์ ์๋ A[r][c]๋ฅผ ์๋ฏธํ๋ค.
๋ค์ M๊ฐ์ ์ค์๋ ์ด๋์ ์ ๋ณด di, si๊ฐ ์์๋๋ก ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ M๋ฒ์ ์ด๋์ด ๋ชจ๋ ๋๋ ํ ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.
์ ํ
- 2 ≤ N ≤ 50
- 1 ≤ M ≤ 100
- 0 ≤ A[r][c] ≤ 100
- 1 ≤ di ≤ 8
- 1 ≤ si ≤ 50
์์ ์ ๋ ฅ 1
5 4
0 0 1 0 2
2 3 2 1 0
4 3 2 9 0
1 0 2 9 0
8 8 2 1 0
1 3
3 4
8 1
4 8
์์ ์ถ๋ ฅ 1
77
๊ตฌ๋ฆ์ด ์๋ ์นธ์ ๋นจ๊ฐ์์ผ๋ก ํ์ํ๊ณ , ๋ฌผ์ด ์ฆ๊ฐํ ์นธ์ ์ด๋ก์์ผ๋ก ํ์ํ๋ค.
์ฒซ ๋ฒ์งธ ์ด๋์ ๊ตฌ๋ฆ์ด 1๋ฒ ๋ฐฉํฅ(←)์ผ๋ก 3์นธ ์ด๋ํด์ผ ํ๋ค. ๊ตฌ๋ฆ์ด ์ด๋ํ ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๊ตฌ๋ฆ์ด ์๋ ์นธ์ ๋น๊ฐ 1์ฉ ๋ด๋ฆฌ๊ณ , ๊ตฌ๋ฆ์ ์ฌ๋ผ์ง๋ค.
(4, 3)์ ๋๊ฐ์ 4๊ฐ์ ๋ฐฉํฅ ๋ชจ๋์ ๋ฌผ์ด ์๋ค. ๋ฐ๋ผ์, ๋ฌผ์ ์์ด 4 ์ฆ๊ฐํด 7์ด ๋๋ค. (4, 4)๋ ๋๊ฐ์ 2๊ฐ์ ๋ฐฉํฅ(โ, โ)์ ๋ฌผ์ด ์๋ค. ๋ฌผ์ ์์ 2 ์ฆ๊ฐํ๊ณ , 12๊ฐ ๋๋ค. (5, 3)์ ๋๊ฐ์ ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ์นธ์ด 2๊ฐ(โ, โ)์๊ณ , ์ด ์ค์์ 1๊ฐ(โ)๋ง ๋ฌผ์ด ์๋ค. ๋ฐ๋ผ์, ๋ฌผ์ ์์ 3์์ 4๋ก ๋ณํ๋ค. (5, 4)๋ ๋ฐฉํฅ 1๊ฐ(โ)๋ง ๋ฌผ์ด ์๊ธฐ ๋๋ฌธ์, ๋ฌผ์ ์์ด 3์ด ๋๋ค.
์ด์ ๊ตฌ๋ฆ์ด ์์๋ ์นธ์ ์ ์ธํ ๋๋จธ์ง ์นธ ์ค์์ ๋ฌผ์ ์์ด 2 ์ด์์ธ ์นธ์ ๊ตฌ๋ฆ์ด ์๊ธด๋ค. ๊ตฌ๋ฆ์ด ์๊ธฐ๋ฉด ๋ฌผ์ ์์ด 2๋งํผ ์ค์ด๋ ๋ค.
๋ ๋ฒ์งธ ์ด๋์ด ๋๋ ํ์ ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ค์์ ์ธ ๋ฒ์งธ ์ด๋์ด ๋๋ ํ์ ์ํ์ด๋ค.
๋ชจ๋ ์ด๋์ด ๋๋ ์ต์ข ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
ํ์ด
# ์ผ์ฑ SW ์ญ๋ ํ
์คํธ ๊ธฐ์ถ ๋ฌธ์
# ๋ฐฑ์ค 21610๋ฒ. ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ
n, m = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(n)] # ๊ฒฉ์ ์
๋ ฅ ๋ฐ๊ธฐ
order = [list(map(int, input().split())) for _ in range(m)] # ๋ช
๋ น(์ด๋ ๋ฐฉํฅ, ์นธ ์)
# 8๊ฐ์ง ๋ฐฉํฅ
dir_x = [0, -1, -1, -1, 0, 1, 1, 1]
dir_y = [-1, -1, 0, 1, 1, 1, 0, -1]
cloud = [(n - 1, 0), (n - 1, 1), (n - 2, 0), (n - 2, 1)] # ์ด๊ธฐ ๊ตฌ๋ฆ ์ํ
for d, s in order:
for i in range(len(cloud)):
x = (cloud[i][0] + (s * dir_x[d - 1])) % n
y = (cloud[i][1] + (s * dir_y[d - 1])) % n
# ๊ฐ ๊ตฌ๋ฆ์์ ๋น๊ฐ ๋ด๋ ค ๊ตฌ๋ฆ์ด ์๋ ์นธ์ ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 1 ์ฆ๊ฐํ๋ค
a[x][y] += 1
# ๊ตฌ๋ฆ ์ด๋
cloud[i] = [x, y]
# ๋๊ฐ์ ๋ฐฉํฅ(dir_x dir_y ์ 1, 3, 5, 7๋ฒ์งธ ๋ฐฉํฅ) ๋ฌผ ๋ณต์ฌ
for x, y in cloud:
for i in range(1, 8, 2):
nx = x + dir_x[i]
ny = y + dir_y[i]
if 0 <= nx < n and 0 <= ny < n:
if a[nx][ny] != 0:
a[x][y] += 1 # ๋ฌผ์ด ์๋ ๋ฐ๊ตฌ๋ ์ ๋งํผ ๋ฌผ์ ์ ์ฆ๊ฐ์ํด
a[x][y] *= -1 # ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ์ธ์ง ์ฒดํฌํ๊ธฐ ์ํ ์์ ์ฒ๋ฆฌ
# ๊ตฌ๋ฆ์ด ๋ชจ๋ ์ฌ๋ผ์ง๋ค
cloud.clear()
# ๊ตฌ๋ฆ์ด ์์๋ ์นธ์ ์ ์ธํ ๋๋จธ์ง ์นธ ์ค์์ ๋ฌผ์ ์์ด 2์ด์์ธ ์นธ์ ๊ตฌ๋ฆ ์์ฑ
for i in range(n):
for j in range(n):
if a[i][j] >= 2:
cloud.append([i, j])
a[i][j] -= 2 # ๋ฌผ์ ์์ 2๋งํผ ๊ฐ์
elif a[i][j] < 0: # ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ์ ์ ์ธํ๊ณ ๊ตฌ๋ฆ ์์ฑ
# ๋ค์ ์์๋ก ๋ง๋ค์ด ์ค
a[i][j] *= -1
# ๋ช
๋ น for๋ฌธ ์ข
๋ฃ
# ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ
answer = 0
for i in range(n):
for j in range(n):
answer += a[i][j]
print(answer)
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
- ๊ตฌํ
- ์๋ฎฌ๋ ์ด์