๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/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๋ถํฐ ์์๋๋ก ←, โ, ↑, โ, →, โ, ↓, โ์ด๋ค. ์ด๋์ ๋ช ๋ นํ๋ฉด ๋ค์์ด ์์๋๋ก ์งํ๋๋ค.
1. ๋ชจ๋ ๊ตฌ๋ฆ์ด di ๋ฐฉํฅ์ผ๋ก si์นธ ์ด๋ํ๋ค.
2. ๊ฐ ๊ตฌ๋ฆ์์ ๋น๊ฐ ๋ด๋ ค ๊ตฌ๋ฆ์ด ์๋ ์นธ์ ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 1 ์ฆ๊ฐํ๋ค.
3. ๊ตฌ๋ฆ์ด ๋ชจ๋ ์ฌ๋ผ์ง๋ค.
4. 2์์ ๋ฌผ์ด ์ฆ๊ฐํ ์นธ (r, c)์ ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ์์ ํ๋ค. ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ์ฌ์ฉํ๋ฉด, ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ์นธ์ ๋ฌผ์ด ์๋ ๋ฐ๊ตฌ๋์ ์๋งํผ (r, c)์ ์๋ ๋ฐ๊ตฌ๋์ ๋ฌผ์ด ์์ด ์ฆ๊ฐํ๋ค.
์ด๋๋ ์ด๋๊ณผ ๋ค๋ฅด๊ฒ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ ์นธ์ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ์นธ์ด ์๋๋ค.
์๋ฅผ ๋ค์ด, (N, 2)์์ ์ธ์ ํ ๋๊ฐ์ ์นธ์ (N-1, 1), (N-1, 3)์ด๊ณ , (N, N)์์ ์ธ์ ํ ๋๊ฐ์ ์นธ์ (N-1, N-1)๋ฟ์ด๋ค.
5. ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 2 ์ด์์ธ ๋ชจ๋ ์นธ์ ๊ตฌ๋ฆ์ด ์๊ธฐ๊ณ , ๋ฌผ์ ์์ด 2 ์ค์ด๋ ๋ค. ์ด๋ ๊ตฌ๋ฆ์ด ์๊ธฐ๋ ์นธ์ 3์์ ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ์ด ์๋์ด์ผ ํ๋ค.
M๋ฒ์ ์ด๋์ด ๋ชจ๋ ๋๋ ํ ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, M์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ N๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. r๋ฒ์งธ ํ์ c๋ฒ์งธ ์ ์๋ A [r][c]๋ฅผ ์๋ฏธํ๋ค.
๋ค์ M๊ฐ์ ์ค์๋ ์ด๋์ ์ ๋ณด di, si๊ฐ ์์๋๋ก ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ M๋ฒ์ ์ด๋์ด ๋ชจ๋ ๋๋ ํ ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
n,m=map(int,sys.stdin.readline().split())
arr=[] # ๋ฐ๊ตฌ๋
cloud=[[0]*n for i in range(n)] # ๊ตฌ๋ฆ
for i in range(n):
arr.append(list(map(int,sys.stdin.readline().split())))
info=[] # ์ด๋์ ์ ๋ณด
for i in range(m):
info.append(list(map(int,sys.stdin.readline().split())))
# ์ฒ์ ๋น๊ตฌ๋ฆ ์์น
cloud[n-1][0]=1
cloud[n-1][1]=1
cloud[n-2][0]=1
cloud[n-2][1]=1
# 8๊ฐ์ ๋ฐฉํฅ
dx=[0,-1,-1,-1,0,1,1,1]
dy=[-1,-1,0,1,1,1,0,-1]
# ๋๊ฐ์
dia_x=[-1,-1,1,1]
dia_y=[-1,1,-1,1]
for i in info:
visited = [[0] * n for v in range(n)]
for j in range(n):
for k in range(n):
if cloud[j][k]==1: # ๋น๊ตฌ๋ฆ์ด ์๋ค๋ฉด ์ด๋
x=j+(dx[i[0]-1]*i[1])
y=k+(dy[i[0]-1]*i[1])
if x<0:
x=n-(-x)%n
if x==n:
x=0
elif x>=n:
x%=n
if y<0:
y = n - (-y) % n
if y==n:
y=0
elif y>=n:
y%=n
visited[x][y]=1
arr[x][y]+=1 # ๋น๊ฐ ๋ด๋ ค ๊ตฌ๋ฆ ์๋ ์นธ์ ๋ฌผ์ ์ +1
cloud[j][k]=0 # ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง
for j in range(n): # ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ
for k in range(n):
if visited[j][k]==1: # ๋ฌผ์ด ์ฆ๊ฐํ ์นธ
cnt=0
for v in range(4): # ๋๊ฐ์
x=j+dia_x[v]
y=k+dia_y[v]
if 0<=x<n and 0<=y<n:
if arr[x][y]!=0:
cnt+=1
arr[j][k]+=cnt # ๋ฌผ์ ์ ์ฆ๊ฐ
for j in range(n):
for k in range(n):
if arr[j][k]>=2 and visited[j][k]==0: # ๋ฌผ์ ์ 2 ์ด์, ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ x
cloud[j][k]=1 # ๊ตฌ๋ฆ ์๊น
arr[j][k]-=2 # ๋ฌผ์ ์ -2
result=0 # ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ
for i in range(n):
for j in range(n):
result+=arr[i][j]
print(result)
- n, m
- arr = N x N ๊ฒฉ์ ์
๋ ฅ ์ ์ฅ
info = ์ด๋์ ์ ๋ณด ์ ๋ ฅ ์ ์ฅ - cloud = ๊ตฌ๋ฆ ์์น ์ ๋ณด
# ์ฒ์ ๋น๊ตฌ๋ฆ์ ์์น (n-1,0) (n-1,1) (n-2,0) (n-2,1) - dx, dy = 8 ๊ฐ์ ๋ฐฉํฅ
dia_x, dia_y = ๋๊ฐ์ - ์ด๋์ ์ ๋ณด ๋ฆฌ์คํธ ์ํ
- visited = ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ ํ๋ณ ๋ฐ ๋ฌผ์ด ์ฆ๊ฐํ ์นธ ํ๋ณ
# ๋ฌธ์ ์์ ์ฃผ์ด์ง ์์ 3๋ฒ๊น์ง ํด๊ฒฐ
- arr ์ ์ฒด ์ํํ๋ฉฐ ๋น๊ตฌ๋ฆ์ด ์๋ค๋ฉด di ๋ฐฉํฅ์ผ๋ก si ์นธ ์ด๋ ( 1๋ฒ ํ๊ณผ N๋ฒ ํ, 1๋ฒ ์ด๊ณผ N๋ฒ ์ด์ ์ฐ๊ฒฐํ์ผ๋ฏ๋ก index๋ฅผ ์ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค. ) -> ์ด๋ํ ์นธ visited 1๋ก ์ ์ฅ ๋ฐ ๋น๊ฐ ๋ด๋ฆฌ๋ฏ๋ก ๊ตฌ๋ฆ์ด ์๋ ์นธ์ ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์ +1, ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง๋ฏ๋ก cloud 0์ผ๋ก ์ ์ฅ
# ๋ฌธ์ ์์ ์ฃผ์ด์ง ์์ 4๋ฒ ํด๊ฒฐ
- ๋ฌผ๋ณต์ฌ ๋ฒ๊ทธ๋ฅผ ์ํด arr ์ ์ฒด ์ํํ์ฌ ๋ฌผ์ด ์ฆ๊ฐํ ์นธ์ด๋ผ๋ฉด ( visited ๊ฐ์ด 1์ด๋ผ๋ฉด ) ๊ทธ ์ขํ์์ ๋๊ฐ์ ์ ๊ตฌํ์ฌ ๊ทธ arr ๊ฐ์ด 0์ด ์๋๋ผ๋ฉด cnt +1 -> ๋๊ฐ์ 4๊ณณ์ ํ๋ณํ ํ arr (๋ฐ๊ตฌ๋)์ ๋ฌผ์ ์ ์ฆ๊ฐํด์ค (+cnt)
# ๋ฌธ์ ์์ ์ฃผ์ด์ง ์์ 5๋ฒ ํด๊ฒฐ
- arr ์ ์ฒด๋ฅผ ์ํํ์ฌ ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ด 2 ์ด์์ด๊ณ ์์ 3์์ ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ์ด ์๋๋ผ๋ฉด ( visited ๊ฐ์ด 0์ด๋ผ๋ฉด) ๊ตฌ๋ฆ์ด ์๊ธฐ๊ณ ๋ฌผ์ ์์ด 2 ์ค์ด๋ฆ - result = ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ
- arr ์ ์ฒด๋ฅผ ์ํํ์ฌ ๋ชจ๋ ๊ฐ์ ๋ค ๋ํด์ค ํ result ์ถ๋ ฅ
โ ์ ํ๋ ธ๋๊ฐ?
๋ฌธ์ ์์ ์ฃผ์ด์ง ์์๋ง ์๊ฐํด์ ๋ฐ์ํ ๋ฌธ์ ์๋ค. ์ขํ๋ฅผ ๊ตฌํ ๋ ๋ฒ์๋ฅผ ๋ฌธ์ ์์ ์ ์ํ ๊ฐ์ผ๋ก๋ง ๊ฐ๋ฅํ๋๋ก ์ค์ ํ์ฌ ํ๋ ธ์ต๋๋ค๊ฐ ๋ฐ์ํ๋ค. ๋ ๋ฒ์งธ๋ ์ขํ๋ฅผ ๊ตฌํ ๋ x, y ๋ ๋ค ์์ธ ์กฐ๊ฑด์ ์ค์ ํด์ผ ํ๋๋ฐ x์๋ง ์ค์ ํ์ฌ ์ธ๋ฑ์ค ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด์๋ค.
โ index ์ค์
1๋ฒ ํ๊ณผ N๋ฒ ํ์ ์ฐ๊ฒฐํ๊ณ , 1๋ฒ ์ด๊ณผ N๋ฒ ์ด์ ์ฐ๊ฒฐํ์ผ๋ฏ๋ก ํ๊ณผ ์ด์ ๊ตฌํ ๋ ์กฐ๊ฑด์์ ํตํ์ฌ ์ขํ๋ฅผ ๊ตฌํด์ฃผ์ด์ผ ํ๋ค.
ํผ์ ์ขํ๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด์ ๊ตฌํ ์์ธ๋ฐ... ์์ง ๊ธ๋ก ์ค๋ช ํ๊ธฐ์๋ ํ๋ ๊ฒ ๊ฐ๋ค...
๋ค์์ ์ ๋ฆฌํด์ ๋์์ค๊ฒ ๋ค -!
์๊ฐ๐ค
๋ฌธ์ ๋ฅผ ์ ์ฝ๊ณ ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค.
ํ์ง๋ง... ๋ฐฉ์ฌํ์ง ๋ง์... ํ๋๋ผ๋ ๋น ํธ๋ฆฌ๋ฉด ์คํจํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 16236_์๊ธฐ ์์ด (0) | 2022.05.26 |
---|---|
[Baekjoon] 17086_์๊ธฐ ์์ด 2 (0) | 2022.05.20 |
[Baekjoon] 14891_ํฑ๋๋ฐํด (0) | 2022.05.12 |
[Baekjoon] 23288_์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ 2 (0) | 2022.05.11 |
[Baekjoon] 14499_์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.05.09 |