SWEA 1861. 정사각형 방 (Python)(D4)

Wjong·2023년 2월 10일
0

swea

목록 보기
29/36

N과, NXN의 이차원 배열이 주어진다.
이차원 배열은 1,2,3,,,,N의 숫자가 랜덤하게 들어있다.
이때, 어느 방 하나를 골랐을때 숫자가 A라면, 상하좌우에 A+1이 존재할 경우 해당방으로 이동하고, 이동을 할 수 없을때까지 이동했을때 이동한 횟수가 최대인 처음시작 방(A)과 이동횟수를 구한다.

  • 방문처리할 필요가 없으므로 visit는 사용하지 않는다.
  • 이차원 배열을 순회하면서 상하좌우에 li[i][j]+1의 값이 있을경우 count를 갱신 [이동횟수,처음시작방번호]
  • 순회가 끝날때마다 결과값 갱신
    - 이동횟수가 결과값보다 클경우 [이동횟수,방번호] 갱신
    - 이동횟수가 결과값과 같고 방번호가 결과값의 방번호보다 작을경우 [이동횟수,방번호] 갱신
from collections import deque
dx=[0,0,-1,1]
dy=[1,-1,0,0]
res=[]
for m in range(int(input())):
    tmp=[0,[0]]
    N=int(input())
    li=[[0]*(N+1)]
    for i in range(N):
        li.append([0]+list(map(int,input().split())))
    for i in range(1,N+1):
        for j in range(1,N+1):
            q=deque()
            q.append((i,j))
            count=[1,li[i][j]]
            while q:
                x,y=q.popleft()
                for k in range(4):
                    nx=x+dx[k]
                    ny=y+dy[k]
                    if 1<=nx<=N and 1<=ny<=N:
                        if li[nx][ny]==(li[x][y]+1):
                            q.append((nx,ny))
                            count[0]+=1
            if count[0]>tmp[0]:
                tmp=count
            elif count[0]==tmp[0] and count[1]<tmp[1]:
                tmp=count

    res.append(str(tmp[1])+" "+str(tmp[0]))
for i in range(len(res)):
    print("#%d %s"%(i+1,res[i]))
profile
뉴비

0개의 댓글