ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] ๋ฐฑ์ค€ 2178 ๋ฏธ๋กœ ํƒ์ƒ‰ (BFS)
    ๐Ÿ’ป Algorithm/Python 2022. 7. 2. 15:36

     

    ๐Ÿ“Œ ๋ฌธ์ œ

    N×Mํฌ๊ธฐ์˜ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜๋Š” ๋ฏธ๋กœ๊ฐ€ ์žˆ๋‹ค.

     

    1 0 1 1 1 1
    1 0 1 0 1 0
    1 0 1 0 1 1
    1 1 1 0 1 1


    ๋ฏธ๋กœ์—์„œ 1์€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์„ ๋‚˜ํƒ€๋‚ด๊ณ , 0์€ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์นธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, (1, 1)์—์„œ ์ถœ๋ฐœํ•˜์—ฌ (N, M)์˜ ์œ„์น˜๋กœ ์ด๋™ํ•  ๋•Œ ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ์˜ ์นธ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ํ•œ ์นธ์—์„œ ๋‹ค๋ฅธ ์นธ์œผ๋กœ ์ด๋™ํ•  ๋•Œ, ์„œ๋กœ ์ธ์ ‘ํ•œ ์นธ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ์œ„์˜ ์˜ˆ์—์„œ๋Š” 15์นธ์„ ์ง€๋‚˜์•ผ (N, M)์˜ ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์นธ์„ ์…€ ๋•Œ์—๋Š” ์‹œ์ž‘ ์œ„์น˜์™€ ๋„์ฐฉ ์œ„์น˜๋„ ํฌํ•จํ•œ๋‹ค.

    ์ž…๋ ฅ

    ์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

    ์ถœ๋ ฅ

    ์ฒซ์งธ ์ค„์— ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ์˜ ์นธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ํ•ญ์ƒ ๋„์ฐฉ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

    ์˜ˆ์ œ ์ž…๋ ฅ 1

    4 6
    101111
    101010
    101011
    111011

    ์˜ˆ์ œ ์ถœ๋ ฅ 1

    15

    ์˜ˆ์ œ ์ž…๋ ฅ 2

    4 6
    110110
    110110
    111111
    111101

    ์˜ˆ์ œ ์ถœ๋ ฅ 2

    9

    ์˜ˆ์ œ ์ž…๋ ฅ 3

    2 25
    1011101110111011101110111
    1110111011101110111011101

    ์˜ˆ์ œ ์ถœ๋ ฅ 3

    38

    ์˜ˆ์ œ ์ž…๋ ฅ 4

    7 7
    1011111
    1110001
    1000001
    1000001
    1000001
    1000001
    1111111

    ์˜ˆ์ œ ์ถœ๋ ฅ 4

    13

     


     

    ๐Ÿ“Œ ํ’€์ด

    ๐Ÿ’ฌ Code

    import sys
    from collections import deque
    input = sys.stdin.readline
    
    
    def bfs(x, y):
        q = deque([(x-1, y-1)])
        while q:
            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 maze[nx][ny] == 1:
                    q.append((nx, ny))
                    maze[nx][ny] += maze[x][y]
    
        return maze[n-1][m-1]
    
    
    if __name__ == '__main__':
        n, m = map(int, input().split())
        maze = []
    
        for _ in range(n):
            maze.append(list(map(int, input().rstrip())))
    	
        # ๋ฐฉํ–ฅ๋ฒกํ„ฐ (์ƒ, ํ•˜, ์ขŒ, ์šฐ)
        dx = [-1, 1, 0, 0]
        dy = [0, 0, -1, 1]
    
        print(bfs(1, 1))

     

    ๐Ÿ’ก Solution

    ์ด์ฝ”ํ…Œ์—์„œ ์˜ˆ์ œ๋กœ ๋‚˜์™”๋˜ ๋ฌธ์ œ๋ผ ์‰ฝ๊ฒŒ ํ’€์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

     

    1. ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ํ•ด๋‹น ์ขŒํ‘œ์˜ ์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฐ๊ฐ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด ์ขŒํ‘œ๋งˆ๋‹ค for๋ฌธ์„ 4๋ฒˆ ๋Œ๋ฆฝ๋‹ˆ๋‹ค.
    2. nx, ny๋Š” ์ด๋™์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋™์ขŒํ‘œ๊ฐ€ (-1, -1)์ฒ˜๋Ÿผ ์ขŒํ‘œ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์•˜๊ณ  ํ•ด๋‹น ์ขŒํ‘œ์— ๋†“์ธ ๊ฐ’์ด 1์ด๋ผ๋ฉด ๊ทธ ๊ณณ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ด๋™ ํ›„ ํ์— (nx, ny)์Œ์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
    3. ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ ์นธ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ด๋™์นธ์ˆ˜๋ฅผ ๋ˆ„์ ์‹œํ‚ต๋‹ˆ๋‹ค. maze[x][y]์—์„œ maze[nx][ny]๋กœ์˜ ์ด๋™์นธ์ˆ˜๋Š” 1์นธ์ธ๋ฐ, maze[nx][ny]์˜ ๊ฐ’์ด ์ด๋ฏธ 1์ด๊ธฐ ๋•Œ๋ฌธ์— maze[nx][ny] += maze[x][y] ํ•ด์ฃผ๋ฉด maze[nx][ny]์— ์—ฌํƒœ๊นŒ์ง€ ์ง€๋‚˜์˜จ ์นธ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค.
    4. ๋ชฉํ‘œ ์ขŒํ‘œ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋!

     

    ๋Œ“๊ธ€

Designed by Tistory.