ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] ๋ฐฑ์ค€ 7576 ํ† ๋งˆํ†  (BFS)
    ๐Ÿ’ป Algorithm/Python 2022. 7. 8. 23:32

    ๐Ÿ“Œ ๋ฌธ์ œ

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

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

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

    ์ž…๋ ฅ

    ์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M,N ≤ 1,000 ์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ์ €์žฅ๋œ ํ† ๋งˆํ† ๋“ค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฆ‰, ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์ƒ์ž์— ๋‹ด๊ธด ํ† ๋งˆํ† ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ํ•˜๋‚˜์˜ ์ค„์—๋Š” ์ƒ์ž ๊ฐ€๋กœ์ค„์— ๋“ค์–ด์žˆ๋Š” ํ† ๋งˆํ† ์˜ ์ƒํƒœ๊ฐ€ M๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ •์ˆ˜ 1์€ ์ต์€ ํ† ๋งˆํ† , ์ •์ˆ˜ 0์€ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† , ์ •์ˆ˜ -1์€ ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์นธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    ํ† ๋งˆํ† ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

    ์ถœ๋ ฅ

    ์—ฌ๋Ÿฌ๋ถ„์€ ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์„ ๋•Œ๊นŒ์ง€์˜ ์ตœ์†Œ ๋‚ ์งœ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ, ์ €์žฅ๋  ๋•Œ๋ถ€ํ„ฐ ๋ชจ๋“  ํ† ๋งˆํ† ๊ฐ€ ์ต์–ด์žˆ๋Š” ์ƒํƒœ์ด๋ฉด 0์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ณ , ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์ง€๋Š” ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด๋ฉด -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

    ์˜ˆ์ œ ์ž…๋ ฅ 1

    6 4
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 1

    ์˜ˆ์ œ ์ถœ๋ ฅ 1

    8

    ์˜ˆ์ œ ์ž…๋ ฅ 2

    6 4
    0 -1 0 0 0 0
    -1 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 1

    ์˜ˆ์ œ ์ถœ๋ ฅ 2

    -1

    ์˜ˆ์ œ ์ž…๋ ฅ 3

    6 4
    1 -1 0 0 0 0
    0 -1 0 0 0 0
    0 0 0 0 -1 0
    0 0 0 0 -1 1

    ์˜ˆ์ œ ์ถœ๋ ฅ 3

    6

    ์˜ˆ์ œ ์ž…๋ ฅ 4

    5 5
    -1 1 0 0 0
    0 -1 -1 -1 0
    0 -1 -1 -1 0
    0 -1 -1 -1 0
    0 0 0 0 0

    ์˜ˆ์ œ ์ถœ๋ ฅ 4

    14

    ์˜ˆ์ œ ์ž…๋ ฅ 5

    2 2
    1 -1
    -1 1

    ์˜ˆ์ œ ์ถœ๋ ฅ 5

    0

     


    ๐Ÿ“Œ ํ’€์ด

    ๐Ÿ’ฌ Code

    import sys
    from collections import deque
    input = sys.stdin.readline
    
    m, n = map(int, input().split())
    box = []
    tomato = []
    for i in range(n):
        box.append(list(map(int, input().split())))
        for j in range(m):
            if box[i][j] == 1:
                tomato.append((0, i, j))
    
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    
    q = deque(tomato)
    while q:
        day, x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m and box[nx][ny] == 0:
                box[nx][ny] = 1
                q.append((day+1, nx, ny))
    
    for i in range(n):
        if 0 in box[i]:
            print(-1)
            sys.exit(0)
    
    print(day)

    ๐Ÿ’ก Solution

    m, n = map(int, input().split())
    box = []
    tomato = []
    for i in range(n):
        box.append(list(map(int, input().split())))
        for j in range(m):
            if box[i][j] == 1:
                tomato.append((0, i, j))
    • box: ๊ฐ ์ƒ์ž์˜ ํ† ๋งˆํ†  ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” 2์ฐจ์› ๋ฆฌ์ŠคํŠธ
    • tomato: ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ. 0์€ ์ด ํ† ๋งˆํ† ๊ฐ€ ์ต์€ ๋‚ ์งœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

    q = deque(tomato)
    while q:
        day, x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m and box[nx][ny] == 0:
                box[nx][ny] = 1
                q.append((day+1, nx, ny))

    ์ต๋งˆํ† ๊ฐ€ ์žˆ๋Š” ์œ„์น˜์˜ ๊ทผ์ฒ˜๋งŒ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด์„œ ๋ฑ์— tomato๋ฅผ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.

     

    (nx, ny)๋Š” ์ต๋งˆํ† ์˜ ์œ„์น˜์ธ (x, y)๋กœ๋ถ€ํ„ฐ ์ƒ/ํ•˜/์ขŒ/์šฐ๋กœ ์ด๋™ํ•œ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์ด๋™์œ„์น˜์— ๋œ๋งˆํ† ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ต๋„๋ก ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค. ์ด ๋œ๋งˆํ† ๊ฐ€ ์ต์€ ๋‚ ์งœ๋Š” ์ต๋งˆํ† ๊ฐ€ ์ต์€ ๋‚ ์งœ์˜ ๋‹ค์Œ ๋‚ ์ด๋ฏ€๋กœ ๋ฑ์— day+1์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

     

    ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋œ๋งˆํ† ๋ฅผ ๋‹ค ์ตํ˜€์คฌ๋‹ค๋ฉด if๋ฌธ์—๋Š” ๋“ค์–ด๊ฐˆ ์ผ์ด ์—†์–ด์ง‘๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— day๊ฐ€ ๋ฐ”๋€” ์ผ์ด ์—†๊ณ , ๋‹น์—ฐํžˆ ์ตœ์ข…์ ์œผ๋กœ day์—๋Š” ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต๊ฒŒ ๋œ ๋‚ ์งœ๊ฐ€ ์ €์žฅ๋˜๋ฏ€๋กœ print(day)ํ•ด์ฃผ๋ฉด ์ •๋‹ต์ฒ˜๋ฆฌ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    for i in range(n):
        if 0 in box[i]:
            print(-1)
            sys.exit(0)
    
    print(day)

    ๋‹จ! ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์—” ์ถœ๋ ฅ์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— box๋ฅผ ๋Œ๋ฉด์„œ ๋œ๋งˆํ† ๊ฐ€ ์กด์žฌํ•˜๋ฉด -1์„ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒ์‹œํ‚ต๋‹ˆ๋‹ค.

     

     

     

    ๋Œ“๊ธ€

Designed by Tistory.