๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 21608_์ƒ์–ด ์ดˆ๋“ฑํ•™๊ต

๋ฟŒ์•ผ._. 2022. 5. 27. 13:13

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: 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์ธ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋ถ€๋ถ„์„ ๊ณ ๋ คํ•ด์ฃผ์ง€ ๋ชปํ•˜์—ฌ ์ด๋ฏธ ์ž๋ฆฌ๊ฐ€ ์ •ํ•ด์ง„ ๊ณณ์— ๋‹ค๋ฅธ ์นœ๊ตฌ๋ฅผ ๋˜ ์ง€์ •ํ•ด์ค˜ ํ‹€๋ฆฌ๊ฒŒ ๋œ ๊ฒƒ์ด์—ˆ๋‹ค.

 

 


์ƒ๊ฐ๐Ÿค”