DevYoon

[๋ฐฑ์ค€] 1937. ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค (Python) ๋ณธ๋ฌธ

PS/Baekjoon

[๋ฐฑ์ค€] 1937. ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค (Python)

gimewn 2022. 5. 19. 00:26

link ๐Ÿ”— https://www.acmicpc.net/problem/1937

 

1937๋ฒˆ: ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค

n × n์˜ ํฌ๊ธฐ์˜ ๋Œ€๋‚˜๋ฌด ์ˆฒ์ด ์žˆ๋‹ค. ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค๋Š” ์–ด๋–ค ์ง€์—ญ์—์„œ ๋Œ€๋‚˜๋ฌด๋ฅผ ๋จน๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ณณ์˜ ๋Œ€๋‚˜๋ฌด๋ฅผ ๋‹ค ๋จน์–ด ์น˜์šฐ๋ฉด ์ƒ, ํ•˜, ์ขŒ, ์šฐ ์ค‘ ํ•œ ๊ณณ์œผ๋กœ ์ด๋™์„ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜ ๊ทธ๊ณณ์—

www.acmicpc.net

 

1๏ธโƒฃ ๋จน์€ ๋Œ€๋‚˜๋ฌด ์ˆ˜๋ณด๋‹ค ๋งŽ์€ ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•˜๋Š” ํŒ๋‹ค

2๏ธโƒฃ ์™„ํƒ์œผ๋กœ ํ’€์—ˆ๋‹ค๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ

3๏ธโƒฃ DFS + DP๋กœ ํ•ด๊ฒฐ

 

import sys
sys.setrecursionlimit(100000)

dir = [(-1, 0), (1, 0), (0, -1), (0, 1)]

n = int(input())
board = [list(map(int, input().split())) for _ in range(n)]
count = [[0]*n for _ in range(n)]
Max = 0

def DFS(y, x):
    if count[y][x]: # ๋“ค๋ฆฐ ์  ์žˆ์œผ๋ฉด
        return count[y][x] # ๋ณธ์ธ ๋ฆฌํ„ด

    count[y][x] = 1 # ์ดˆ๊ธฐ๊ฐ’ ๋„ฃ์–ด์ฃผ๊ธฐ

    for i, j in dir:
        dy, dx = y+i, x+j
        if 0 <= dy < n and 0 <= dx < n:
            if board[dy][dx] > board[y][x]: # ๋Œ€๋‚˜๋ฌด๊ฐ€ ๋” ๋งŽ์ด ์žˆ๋Š” ๊ณณ์œผ๋กœ๋งŒ ์ด๋™
                count[y][x] = max(count[y][x], DFS(dy, dx)+1)

    return count[y][x] # ์ƒํ•˜์ขŒ์šฐ ์ค‘ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‚˜๋ฌด๊ฐ€ ์—†์œผ๋ฉด ๋ณธ์ธ ๋ฆฌํ„ด

for y in range(n):
    for x in range(n):
        if count[y][x] == 0:
            Max = max(Max, DFS(y, x))

print(Max)

 

๐Ÿข ๋ฒ”์œ„๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ (๋Œ€๋‚˜๋ฌด์˜ ์–‘์ด 1000000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค) RecursionError๋ฅผ ํ”ผํ•  ์ˆ˜ ์—†์—ˆ๋‹คใ… ใ… 

๐Ÿข ๊ตฌ๊ธ€์˜ ๋„์›€์„ ๋ฐ›์€ ๊ฒฐ๊ณผ sys.setrecursionlimit(100000)๋กœ ํŒŒ์ด์ฌ์˜ ์žฌ๊ท€ ๊นŠ์ด ์ œํ•œ์„ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค.

๐Ÿข ํŒŒ์ด์ฌ์€ ์ตœ๋Œ€ ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ 1000์œผ๋กœ ์–•์€ ํŽธ์ด๋ผ, ์ฝ”ํ…Œ์—์„œ ์žฌ๊ท€ ์“ธ ๊ฒฝ์šฐ์—๋Š” ์ € ์ฝ”๋“œ๋ฅผ ์จ๋†“์•„์•ผ ํ•˜๋Š” ๋ชจ์–‘์ด๋‹ค. ๋˜ ํ•˜๋‚˜ ๋ฐฐ์› ๋‹ค...โœ๏ธ