SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
T = int(input())
for tc in range(1,T+1):
n = int(input())
arr = [list(map(int,input().split())) for _ in range(n)]
mx_cnt = 0
mx_start = 0
for k in range(n):
for h in range(n):
cnt = 1
i, j = k,h
start = arr[i][j]
while True:
for di, dj in [[0,1],[1,0],[0,-1],[-1,0]]:
ni, nj = i+di, j+dj
if 0<=ni<n and 0<=nj<n and arr[i][j]+1 == arr[ni][nj]:
cnt += 1
i, j = ni, nj
break
else:
break
if mx_cnt < cnt:
mx_cnt = cnt
mx_start = start
elif mx_cnt == cnt and mx_start > start:
mx_start = start
print(f'#{tc} {mx_start} {mx_cnt}')
실행시간 확 줄인 다른 풀이
didj = [[0,1],[1,0],[0,-1],[-1,0]]
T = int(input())
for tc in range(1, T+1):
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
ones = [0] * (N*N+1) # 연속으로 1이 커지는 경우를 표시할 배열
for i in range(N):
for j in range(N):
for di, dj in didj:
ni, nj = i+di, j+dj # arr[i][j]의 주변 칸이
if 0<=ni<N and 0<=nj<N and arr[i][j]+1==arr[ni][nj]:
ones[arr[i][j]] = 1
max_cnt = 0
max_start = 0
c = 0
for k in range(N*N,0,-1):
if ones[k]:
c += 1
if max_cnt<c:
max_cnt = c
max_start = k
elif max_cnt==c:
max_start = k
else: # ones[k]가 0이면
c = 0
print(f'#{tc} {max_start} {max_cnt+1}')
'swea' 카테고리의 다른 글
2819. 격자판의 숫자 이어 붙이기 (0) | 2023.09.25 |
---|---|
7465. 창용 마을 무리의 개수 (0) | 2023.09.25 |
1953. [모의 SW 역량테스트] 탈주범 검거 (0) | 2023.09.04 |
4366. 정식이의 은행업무 (0) | 2023.09.04 |
10966. 물놀이를 가자 (0) | 2023.09.04 |