๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/21608)
<์์ด ์ด๋ฑํ๊ต>
๋ฌธ์
์์ด ์ด๋ฑํ๊ต์๋ ๊ต์ค์ด ํ๋ ์๊ณ , ๊ต์ค์ N×N ํฌ๊ธฐ์ ๊ฒฉ์๋ก ๋ํ๋ผ ์ ์๋ค. ํ๊ต์ ๋ค๋๋ ํ์์ ์๋ N2๋ช ์ด๋ค. ์ค๋์ ๋ชจ๋ ํ์์ ์๋ฆฌ๋ฅผ ์ ํ๋ ๋ ์ด๋ค. ํ์์ 1๋ฒ๋ถํฐ N2๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , (r, c)๋ rํ c์ด์ ์๋ฏธํ๋ค. ๊ต์ค์ ๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์ (1, 1)์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ซ ์นธ์ (N, N)์ด๋ค.
์ ์๋์ ํ์์ ์์๋ฅผ ์ ํ๊ณ , ๊ฐ ํ์์ด ์ข์ํ๋ ํ์ 4๋ช ๋ ๋ชจ๋ ์กฐ์ฌํ๋ค. ์ด์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์ด์ฉํด ์ ํด์ง ์์๋๋ก ํ์์ ์๋ฆฌ๋ฅผ ์ ํ๋ ค๊ณ ํ๋ค. ํ ์นธ์๋ ํ์ ํ ๋ช ์ ์๋ฆฌ๋ง ์์ ์ ์๊ณ , |r1 - r2| + |c1 - c2| = 1์ ๋ง์กฑํ๋ ๋ ์นธ์ด (r1, c1)๊ณผ (r2, c2)๋ฅผ ์ธ์ ํ๋ค๊ณ ํ๋ค.
1. ๋น์ด์๋ ์นธ ์ค์์ ์ข์ํ๋ ํ์์ด ์ธ์ ํ ์นธ์ ๊ฐ์ฅ ๋ง์ ์นธ์ผ๋ก ์๋ฆฌ๋ฅผ ์ ํ๋ค.
2. 1์ ๋ง์กฑํ๋ ์นธ์ด ์ฌ๋ฌ ๊ฐ์ด๋ฉด, ์ธ์ ํ ์นธ ์ค์์ ๋น์ด์๋ ์นธ์ด ๊ฐ์ฅ ๋ง์ ์นธ์ผ๋ก ์๋ฆฌ๋ฅผ ์ ํ๋ค.
3. 2๋ฅผ ๋ง์กฑํ๋ ์นธ๋ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ํ์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์นธ์ผ๋ก, ๊ทธ๋ฌํ ์นธ๋ ์ฌ๋ฌ ๊ฐ์ด๋ฉด ์ด์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์นธ์ผ๋ก ์๋ฆฌ๋ฅผ ์ ํ๋ค
* ์์๋ ๋ณธ๋ฌธ ์ฐธ๊ณ (๊ธธ์ด์ ์๋ต)
์ด์ ํ์์ ๋ง์กฑ๋๋ฅผ ๊ตฌํด์ผ ํ๋ค. ํ์์ ๋ง์กฑ๋๋ ์๋ฆฌ ๋ฐฐ์น๊ฐ ๋ชจ๋ ๋๋ ํ์ ๊ตฌํ ์ ์๋ค. ํ์์ ๋ง์กฑ๋๋ฅผ ๊ตฌํ๋ ค๋ฉด ๊ทธ ํ์๊ณผ ์ธ์ ํ ์นธ์ ์์ ์ข์ํ๋ ํ์์ ์๋ฅผ ๊ตฌํด์ผ ํ๋ค. ๊ทธ ๊ฐ์ด 0์ด๋ฉด ํ์์ ๋ง์กฑ๋๋ 0, 1์ด๋ฉด 1, 2์ด๋ฉด 10, 3์ด๋ฉด 100, 4์ด๋ฉด 1000์ด๋ค.
ํ์์ ๋ง์กฑ๋์ ์ดํฉ์ ๊ตฌํด๋ณด์
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N2๊ฐ์ ์ค์ ํ์์ ๋ฒํธ์ ๊ทธ ํ์์ด ์ข์ํ๋ ํ์ 4๋ช ์ ๋ฒํธ๊ฐ ํ ์ค์ ํ๋์ฉ ์ ์๋์ด ์๋ฆฌ๋ฅผ ์ ํ ์์๋๋ก ์ฃผ์ด์ง๋ค.
ํ์์ ๋ฒํธ๋ ์ค๋ณต๋์ง ์์ผ๋ฉฐ, ์ด๋ค ํ์์ด ์ข์ํ๋ ํ์ 4๋ช ์ ๋ชจ๋ ๋ค๋ฅธ ํ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ํ์์ ๋ฒํธ, ์ข์ํ๋ ํ์์ ๋ฒํธ๋ N2๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ์ด๋ค ํ์์ด ์๊ธฐ ์์ ์ ์ข์ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ์์ ๋ง์กฑ๋์ ์ดํฉ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
def main():
n=int(input())
arr=[[0]*n for i in range(n)]
info=[]
for i in range(n*n): # ์ ๋ณด
info.append(list(map(int,sys.stdin.readline().split())))
arr[1][1]=info[0][0]
dx=[-1,1,0,0]
dy=[0,0,-1,1]
for i in range(1,n*n):
temp=[[0]*n for i in range(n)]
for j in range(n):
for k in range(n):
cnt=0
zero_cnt=0
if arr[j][k]==0:
for v in range(4): # ์ธ์ ํ ์นธ ์ค ์ข์ํ๋ ํ์, ๋น์ด์๋ ์นธ ๊ตฌํ๊ธฐ
x=j+dx[v]
y=k+dy[v]
if 0<=x<n and 0<=y<n :
if arr[x][y]!=0 and arr[x][y] in info[i]:
cnt+=1
elif arr[x][y]==0:
zero_cnt+=1
temp[j][k]=[cnt,zero_cnt]
num=-1
zero_num=-1
for j in range(n):
for k in range(n):
# ๋น์ด์๋ ์นธ ์ค -> ์ข์ํ๋ ํ์์ด ์ธ์ ํ ์นธ์ ๊ฐ์ฅ ๋ง์ ์นธ
if arr[j][k]==0 and temp[j][k][0]>=num:
if temp[j][k][0]>num:
xy = [j, k]
zero_num=temp[j][k][1]
else: # ๋ง์กฑํ๋ ์นธ์ด ์ฌ๋ฌ ๊ฐ์ด๋ฉด
# ์ธ์ ํ ์นธ ์ค์์ ๋น์ด์๋ ์นธ์ด ๊ฐ์ฅ ๋ง์ ์นธ
if temp[j][k][1]>zero_num:
xy = [j, k]
zero_num=temp[j][k][1]
num = temp[j][k][0]
arr[xy[0]][xy[1]]=info[i][0]
result=0 # ํ์์ ๋ง์กฑ๋
for i in range(n):
for j in range(n):
for v in info:
cnt = 0
if arr[i][j]==v[0]:
for k in range(4): # ์ธ์ ํ ์นธ์ ์์ ์ข์ํ๋ ํ์ ์ ๊ตฌํ๊ธฐ
x=i+dx[k]
y=j+dy[k]
if 0<=x<n and 0<=y<n:
if arr[x][y] in v:
cnt+=1
break
if cnt==0 :
result+=0
elif cnt==1:
result+=1
elif cnt==2:
result+=10
elif cnt==3:
result+=100
else:
result+=1000
print(result)
if __name__=="__main__":
main()
- n ์ ๋ ฅ
- info: N*N ์ค์ ํ์์ ๋ฒํธ์ ํ์์ด ์ข์ํ๋ 4๋ช ์ ๋ฒํธ ์ ๋ ฅ
- ์ฒซ ๋ฒ์งธ ํ์์ ์ธ์ ํ ์นธ์ ์ข์ํ๋ ํ์์ ์๋ฅผ ๊ณ ๋ คํ ์ ์์ผ๋ฏ๋ก ๋น์นธ์ด ๊ฐ์ฅ ๋ง์ ์นธ์ผ๋ก ์๋ฆฌ๋ฅผ ์ ํด์ผ ํ๋ค. ๋น์นธ์ด ๊ฐ์ฅ ๋ง์ ์นธ์ด ์ฌ๋ฌ ๊ฐ ์ผ ์ ์๋ ๊ฒฝ์ฐ ์ด๋ฏ๋ก ํ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์นธ, ์ด์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์นธ์ธ (1,1)์ ์ฒซ ๋ฒ์งธ ํ์ ์๋ฆฌ๋ก ์ ํด์ค๋ค.
- dx, dy= ์ธ์ ํ ์นธ ํ์ ( ์ ํ ์ข ์ฐ )
- temp = [ ์ข์ํ๋ ํ์์ ์, ๋น์ด์๋ ์นธ์ ์]
- ์ ์ฒด ๊ต์ค์ ์ํํ๋ฉฐ ์ธ์ ํ ์นธ์ ์๋ ์ข์ํ๋ ํ์์ ์, ๋น์ด์๋ ์นธ์ ์๋ฅผ ์ธ์ด์ค ํ temp์ ์ ์ฅํด์ค๋ค.
- ์์์ ๊ตฌํ temp๋ฅผ ์ํํ๋ฉฐ ๋จผ์ ์ธ์ ํ ์นธ์ ์ข์ํ๋ ํ์์ด ๊ฐ์ฅ ๋ง์ ์นธ์ ๊ตฌํด์ค๋ค. ๋ง์กฑํ๋ ์นธ์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ์ธ์ ํ ์นธ ์ค์์ ๋น์ด์๋ ์นธ์ด ๊ฐ์ฅ ๋ง์ ์นธ์ ๊ตฌํด์ค๋ค.
# ์ฌ๊ธฐ์ 3๋ฒ ์กฐ๊ฑด์ธ ํ์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์นธ, ์ด์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์นธ์ ๋ํ์ฌ ๋ฐ๋ก ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ์ง ์์ ์ด์ ๋ ( 0 , 0 )๋ถํฐ ์ํํ์ฌ ํ์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์๊ณ ์ด์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ผ๋ฉฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ขํ๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. - result = ํ์์ ๋ง์กฑ๋
- ์๋ฆฌ ๋ฐฐ์น๊ฐ ๋ชจ๋ ๋๋ ํ ํ์์ ๋ง์กฑ๋๋ฅผ ๊ตฌํด์ค๋ค
= arr์ ์ ์ฒด ์ํํ๋ฉฐ ์ธ์ ํ ์นธ์ธ ์ํ์ข์ฐ๋ฅผ ํ์ํด์ค๋ค. ์ธ์ ํ ์นธ์ ์ข์ํ๋ ํ์์ด ์๋ค๋ฉด cnt๋ฅผ +1 ํด์ค๋ค. ์ํ์ข์ฐ ํ์ ํ cnt ๊ฐ์ ๋ฐ๋ผ ๋ง์กฑ๋์ธ result์ ๊ฐ์ ๋ํด์ค๋ค. - result ์ถ๋ ฅ
โ ์ ํ๋ ธ๋๊ฐ?
๋น์นธ์ด ์์ง๋ง ์ธ์ ํ ์นธ์ ์๋ ์ข์ํ๋ ํ์์ ์, ๋น์ด์๋ ์นธ์ ์๊ฐ 0์ธ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ถ๋ถ์ ๊ณ ๋ คํด์ฃผ์ง ๋ชปํ์ฌ ์ด๋ฏธ ์๋ฆฌ๊ฐ ์ ํด์ง ๊ณณ์ ๋ค๋ฅธ ์น๊ตฌ๋ฅผ ๋ ์ง์ ํด์ค ํ๋ฆฌ๊ฒ ๋ ๊ฒ์ด์๋ค.
์๊ฐ๐ค
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 3184_์ (0) | 2022.06.02 |
---|---|
[Baekjoon] 14500_ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2022.05.31 |
[Baekjoon] 16236_์๊ธฐ ์์ด (0) | 2022.05.26 |
[Baekjoon] 17086_์๊ธฐ ์์ด 2 (0) | 2022.05.20 |
[Baekjoon] 21610_๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (0) | 2022.05.16 |