practivceAlgorithm/swexpertacademy

[SWEA][Python] 1861 정사각형방

findTheValue 2021. 10. 8. 12:40

적힌 숫자가 중복 없이 1씩 늘어나기 때문에 배열에 index로 쓸 수 있습니다.

그 후 index에 따라 이동 가능여부를 조사해주면 됩니다.

올해 하반기 라인 코테 3번 문제와 아이디어가 비슷합니다.

 

for test in range(1, int(input()) + 1):
    N = int(input())
    dp = [0] * (N ** 2 + 1)
    for i in range(N):
        row = list(map(int, input().split()))
        for j in range(N):
            dp[row[j]] = (i, j)

    delta = ((0, 1), (1, 0), (0, -1), (-1, 0))

    max_length, cnt, start, answer = 1, 1, 1, 1
    for num in range(1, len(dp)):
        x, y = dp[num]
        for dx, dy in delta:
            if dp[num - 1] == (x + dx, y + dy):
                cnt += 1
                if max_length < cnt:
                    max_length, answer = cnt, start
                break
        else:
            cnt, start = 1, num

    print(f'#{test}', answer, max_length)