PS

[๋ฐฑ์ค€] 1743 ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ with Python

ํ˜•์ค€_It's 2021. 10. 18. 20:41
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ BOJ 1743 ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ

๐Ÿ’ก ์กฐ๊ฑด

  1. ํ†ต๋กœ์˜ ์„ธ๋กœ ๊ธธ์ด N(1 โ‰ค N โ‰ค 100)
    ํ†ต๋กœ์˜ ๊ฐ€๋กœ ๊ธธ์ด M(1 โ‰ค M โ‰ค 100)
    ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ์˜ ๊ฐœ์ˆ˜ K(1 โ‰ค K โ‰ค Nร—M)
    K๊ฐœ์˜ ์ค„์— ์Œ์‹๋ฌผ์ด ๋–จ์–ด์ง„ ์ขŒํ‘œ (r, c)
  2. DFS ์œ ํ˜•์˜ ๋ฌธ์ œ(๊นŠ์ด์šฐ์„ ํƒ์ƒ‰)

๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

from sys import stdin, setrecursionlimit
setrecursionlimit(10 ** 9)

n, m, k = map(int, stdin.readline().split())
arr = [[0] * (m + 1) for _ in range(n + 1)]
food_t = []

for _ in range(k):
    x, y = map(int, stdin.readline().split())
    arr[x][y] = 1
    food_t.append((x, y))

answer = -1e9
dx, dy = [1, -1, 0, 0], [0, 0, -1, 1]


def dfs(x, y):
    global res
    if x < 0 or y < 0 or x > n or y > m:
        return

    if arr[x][y] == 1:
        arr[x][y] = 0
        res += 1
        for i in range(4):
            dfs(x + dx[i], y + dy[i])

        return


for x, y in food_t:
    res = 0
    dfs(x, y)
    answer = max(res, answer)

print(answer)

๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

์˜ˆ์ œ

3 4 5
3 2
2 2
3 1
2 3
1 1

์‹คํ–‰๊ฒฐ๊ณผ

4

โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

  1. m * n ํฌ๊ธฐ์˜ ๋งต์„ ๋งŒ๋“ค์–ด 0์œผ๋กœ ๋„๋ฐฐ๋ฅผ ํ•œ ํ›„, ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์˜ ์ขŒํ‘œ๋ฅผ ๋ฐ›์•„ 1์ด๋ผ๊ณ  ํ‘œ์‹œํ–ˆ๋‹ค.
    ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ์ขŒํ‘œ๋Š” ๋”ฐ๋กœ foot_t๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•˜๋‹ค.

  2. food_t ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์–ด๋А ์ขŒํ‘œ์—์„œ ๊ฐ€์žฅ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ๋˜๋Š”์ง€ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์„ ํ†ตํ•ด ๊ณ„์‚ฐํ•ด์ค€๋‹ค.

๐Ÿ’พ ๋А๋‚€์ 

  1. recursive ์ œ์•ฝ์ด ์žˆ์–ด, setrecursionlimit ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋งค์ผ ๊นŒ๋จน๋Š”๋‹ค. ์กฐ์‹ฌํ•ด์•ผ๊ฒ ๋‹ค.
  2. DFS๋กœ ํ•œ๋ฒˆ, BFS๋กœ ํ•œ๋ฒˆ ํ’€์–ด๋ณด์•˜๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ์‹ซ์—ˆ์—ˆ๋Š”๋ฐ ์ง€๊ธˆ์€ ๊ฐ€์žฅ ์ข‹๋‹ค.
๋ฐ˜์‘ํ˜•