๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Coding Test

[๋ฐฑ์ค€] 7576.ํ† ๋งˆํ† /Python - Gold5

by The Future Engineer, Lucy 2024. 11. 4.
728x90
๋ฐ˜์‘ํ˜•

โ“๋ฌธ์ œ

https://www.acmicpc.net/problem/7576

์„ฑ๋Šฅ ์š”์•ฝ

์ฝ”๋“œ1 โžก๏ธ ๋ฉ”๋ชจ๋ฆฌ: 156792 KB, ์‹œ๊ฐ„: 460 ms
์ฝ”๋“œ2 โžก๏ธ ๋ฉ”๋ชจ๋ฆฌ: 228982 KB, ์‹œ๊ฐ„: 448 ms

 

๋ฌธ์ œ ์„ค๋ช…

์ฒ ์ˆ˜์˜ ํ† ๋งˆํ†  ๋†์žฅ์—์„œ๋Š” ํ† ๋งˆํ† ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํฐ ์ฐฝ๊ณ ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ† ๋งˆํ† ๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฒฉ์ž ๋ชจ์–‘ ์ƒ์ž์˜ ์นธ์— ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์„œ ์ฐฝ๊ณ ์— ๋ณด๊ด€ํ•œ๋‹ค.

์ฐฝ๊ณ ์— ๋ณด๊ด€๋˜๋Š” ํ† ๋งˆํ† ๋“ค ์ค‘์—๋Š” ์ž˜ ์ต์€ ๊ฒƒ๋„ ์žˆ์ง€๋งŒ, ์•„์ง ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ณด๊ด€ ํ›„ ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚˜๋ฉด, ์ต์€ ํ† ๋งˆํ† ๋“ค์˜ ์ธ์ ‘ํ•œ ๊ณณ์— ์žˆ๋Š” ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค์€ ์ต์€ ํ† ๋งˆํ† ์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ์ต๊ฒŒ ๋œ๋‹ค. ํ•˜๋‚˜์˜ ํ† ๋งˆํ† ์˜ ์ธ์ ‘ํ•œ ๊ณณ์€ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์•ž, ๋’ค ๋„ค ๋ฐฉํ–ฅ์— ์žˆ๋Š” ํ† ๋งˆํ† ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ์— ์žˆ๋Š” ํ† ๋งˆํ† ๋“ค์—๊ฒŒ๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ•˜๋ฉฐ, ํ† ๋งˆํ† ๊ฐ€ ํ˜ผ์ž ์ €์ ˆ๋กœ ์ต๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ฐฝ๊ณ ์— ๋ณด๊ด€๋œ ํ† ๋งˆํ† ๋“ค์ด ๋ฉฐ์น ์ด ์ง€๋‚˜๋ฉด ๋‹ค ์ต๊ฒŒ ๋˜๋Š”์ง€, ๊ทธ ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์–ด ํ•œ๋‹ค.

ํ† ๋งˆํ† ๋ฅผ ์ฐฝ๊ณ ์— ๋ณด๊ด€ํ•˜๋Š” ๊ฒฉ์ž๋ชจ์–‘์˜ ์ƒ์ž๋“ค์˜ ํฌ๊ธฐ์™€ ์ต์€ ํ† ๋งˆํ† ๋“ค๊ณผ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฉฐ์น ์ด ์ง€๋‚˜๋ฉด ํ† ๋งˆํ† ๋“ค์ด ๋ชจ๋‘ ์ต๋Š”์ง€, ๊ทธ ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ๋‹จ, ์ƒ์ž์˜ ์ผ๋ถ€ ์นธ์—๋Š” ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

โœ๐Ÿปํ’€์ด

BFS ๋ฌธ์ œ์ด๋‹ค.

์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋Š” ์ต์€ ํ† ๋งˆํ† ์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ์ต๋Š”๋‹ค. ์ต์€ ํ† ๋งˆํ† ๋Š” ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ, ์•ž, ๋’ค์—๋งŒ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 2์™€ ๊ฐ™์ด (0, 0)์— ์œ„์น˜ํ•œ ํ† ๋งˆํ† ๋Š” ์ฃผ์œ„์— ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ต์„ ์ˆ˜ ์—†๋‹ค.
๋จผ์ € ์ถœ๋ฐœ์ง€๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์ต์€ ํ† ๋งˆํ† ์˜ ์œ„์น˜๋ฅผ ํ์— ๊ธฐ๋กํ•œ๋‹ค.
์ต์€ ํ† ๋งˆํ† ๋ฅผ ๊ธฐ์ ์œผ๋กœ ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ, ์•ž, ๋’ค๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ด ๋•Œ, ์•„์ง ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋ผ๋ฉด ํ˜„์žฌ ํ† ๋งˆํ† ๋ฅผ ๊ธฐ์ ์œผ๋กœ +1์„ ํ•œ๋‹ค.
boxes๋ฅผ ํ™•์ธํ–ˆ์„ ๋•Œ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋‹ค๋ฉด -1์„ ์ถœ๋ ฅํ•˜๊ณ  ์ด์™ธ์—๋Š” ์ตœ์†Œ ๋‚ ์งœ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ’ป์ฝ”๋“œ

์ฝ”๋“œ 1

import sys
from collections import deque

input = sys.stdin.readline

n, m = map(int, input().split())
boxes = [list(map(int, input().split())) for _ in range(m)]
dir = [[1, 0], [-1, 0], [0, 1], [0, -1]]
q = deque()

for i in range(m):
    for j in range(n):
        if boxes[i][j] == 1:
            q.append((i, j))

def bfs():
    res = 0
    while q:
        y, x = q.popleft()
        for d in dir:
            ny, nx = y + d[0], x + d[1]
            if 0 <= ny < m and 0 <= nx < n:
                if boxes[ny][nx] == 0:
                    boxes[ny][nx] = boxes[y][x] + 1
                    q.append((ny, nx))

    for i in range(m):
        for j in range(n):
            if boxes[i][j] == 0:
                return -1
            res = max(res, boxes[i][j])

    return res - 1


print(bfs())

์ฝ”๋“œ 2

import sys
from collections import deque

input = sys.stdin.readline

n, m = map(int, input().split())
boxes = [list(map(int, input().split())) for _ in range(m)]
dir = [[1, 0], [-1, 0], [0, 1], [0, -1]]
q = deque()

for i in range(m):
    for j in range(n):
        if boxes[i][j] == 1:
            q.append((i, j, 0))

def bfs():
    res = 0
    while q:
        y, x, day = q.popleft()
        for d in dir:
            ny, nx = y + d[0], x + d[1]
            if 0 <= ny < m and 0 <= nx < n:
                if boxes[ny][nx] == 0:
                    boxes[ny][nx] = 1
                    q.append((ny, nx, day + 1))
                    res = max(res, day + 1)

    for i in range(m):
        for j in range(n):
            if boxes[i][j] == 0:
                return -1

    return res


print(bfs())

๐Ÿ“ํ›„๊ธฐ

์ด ์ •๋„๋ฉด ์‹ฌ๊ฐํ•œ ๋‚œ๋…์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค..๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋ฉด์„œ ์ด๊ฑด bfs์ธ๋ฐ ์–ด๋–ป๊ฒŒ dfs์ด์ง€ ์ƒ๊ฐํ•˜๋ฉด์„œ ๋ฌธ์ œ๋Š” ๋‚ด ๋ˆˆ์ด๋‹ค. bfs๋ฅผ dfs๋กœ ์ฝ๊ณ  ์ด๊ฑธ dfs๋กœ ํ’€๋ ค๊ณ  ํ–ˆ๋‹ค. ์•„์นจ๋ถ€ํ„ฐ ํ’€๋ ค๋‹ˆ๊นŒ ์ž ์ด ๋œ ๊นผ๋‚˜..

์ฝ”๋“œ 1์€ ํ† ๋งˆํ† ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ์ƒ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•˜์—ฌ ๋‚ ์งœ๋ฅผ ๊ธฐ๋กํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  for๋ฌธ์„ ๋Œ๋ฉฐ ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์„ ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ๋‚ ์งœ๋ฅผ ๊ตฌํ•œ๋‹ค. ์ด ๋•Œ, n * m๋ฒˆ max ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— while์— ๊ณ„์‚ฐํ•˜๋Š” ๊ฒŒ ์–ด๋–จ๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๊ฒŒ ๋ฐ”๋กœ ์ฝ”๋“œ2์ด๋‹ค.

์ฝ”๋“œ 2๋Š” ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋ผ๋ฉด ์ด๋ฅผ 1๋กœ ๋ฐ”๊ฟ” ์ต์Œ์„ ํ‘œ์‹œํ•˜๊ณ  ํ์— ๋‹ค์Œ ์ƒ์ž ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•  ๋•Œ ๋‚ ์งœ์™€ ํ•จ๊ป˜ ๊ธฐ๋กํ•˜๊ณ  ์ด ๋•Œ, ๋‚ ์งœ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์‹œ๊ฐ„์€ ์ฝ”๋“œ1์— ๋น„ํ•ด ์ค„์–ด๋“ค์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์กฐ๊ธˆ ๋” ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•