[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ / ํŒŒ์ด์ฌ / BFS
Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ / ํŒŒ์ด์ฌ / BFS

728x90
๋ฐ˜์‘ํ˜•

 

 

๐Ÿ’กsolutions )

๐Ÿ’ฌ BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ

๐Ÿ’ฌ ์ด๋•Œ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๊ณ , ๋˜ ์ด๋ฏธ ์ง€๋‚ฌ๋˜ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด visit ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ธฐ

 

 

๐Ÿ‘จ‍๐Ÿ’ปcode )

from collections import deque

def solution(maps):
    answer = 0
    dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
    q = deque([(0, 0)])

    visit = [[0]*len(maps[0]) for _ in range(len(maps))]
    visit[0][0] = 1
    maps[0][0] = 0
    while q:
        x, y = q.popleft()
        for k in range(4):
            nx, ny = x + dx[k], y + dy[k]
            if 0 <= nx < len(maps) and 0<= ny < len(maps[0]):
                if maps[nx][ny] == 1 and not visit[nx][ny]:
                    visit[nx][ny] = visit[x][y] + 1
                    q.append((nx, ny))
                    
        
    answer = -1
    if visit[-1][-1]:
        return visit[-1][-1]
    return answer

 

 

๐Ÿ“Œdescription )

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ

[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1

programmers.co.kr


๋ฌธ์ œ ์„ค๋ช…

ROR ๊ฒŒ์ž„์€ ๋‘ ํŒ€์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ง„ํ–‰ํ•˜๋ฉฐ, ์ƒ๋Œ€ ํŒ€ ์ง„์˜์„ ๋จผ์ € ํŒŒ๊ดดํ•˜๋ฉด ์ด๊ธฐ๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ํŒ€์€ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋„์ฐฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ ๋‹น์‹ ์€ ํ•œ ํŒ€์˜ ํŒ€์›์ด ๋˜์–ด ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ 5 x 5 ํฌ๊ธฐ์˜ ๋งต์—, ๋‹น์‹ ์˜ ์บ๋ฆญํ„ฐ๊ฐ€ (ํ–‰: 1, ์—ด: 1) ์œ„์น˜์— ์žˆ๊ณ , ์ƒ๋Œ€ ํŒ€ ์ง„์˜์€ (ํ–‰: 5, ์—ด: 5) ์œ„์น˜์— ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

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

  • ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ 11๊ฐœ์˜ ์นธ์„ ์ง€๋‚˜์„œ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ 15๊ฐœ์˜ ์นธ์„ ์ง€๋‚˜์„œ ์ƒ๋Œ€ํŒ€ ์ง„์˜์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ์ƒ๋Œ€ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์œผ๋ฏ€๋กœ, ์ด ๋ฐฉ๋ฒ•์ด ์ƒ๋Œ€ ํŒ€ ์ง„์˜์œผ๋กœ ๊ฐ€๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

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

๊ฒŒ์ž„ ๋งต์˜ ์ƒํƒœ maps๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์บ๋ฆญํ„ฐ๊ฐ€ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€๋‚˜๊ฐ€์•ผ ํ•˜๋Š” ์นธ์˜ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋‹จ, ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•  ์ˆ˜ ์—†์„ ๋•Œ๋Š” -1์„ return ํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • maps๋Š” n x m ํฌ๊ธฐ์˜ ๊ฒŒ์ž„ ๋งต์˜ ์ƒํƒœ๊ฐ€ ๋“ค์–ด์žˆ๋Š” 2์ฐจ์› ๋ฐฐ์—ด๋กœ, n๊ณผ m์€ ๊ฐ๊ฐ 1 ์ด์ƒ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
    • n๊ณผ m์€ ์„œ๋กœ ๊ฐ™์„ ์ˆ˜๋„, ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, n๊ณผ m์ด ๋ชจ๋‘ 1์ธ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • maps๋Š” 0๊ณผ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, 0์€ ๋ฒฝ์ด ์žˆ๋Š” ์ž๋ฆฌ, 1์€ ๋ฒฝ์ด ์—†๋Š” ์ž๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ์— ์บ๋ฆญํ„ฐ๋Š” ๊ฒŒ์ž„ ๋งต์˜ ์ขŒ์ธก ์ƒ๋‹จ์ธ (1, 1) ์œ„์น˜์— ์žˆ์œผ๋ฉฐ, ์ƒ๋Œ€๋ฐฉ ์ง„์˜์€ ๊ฒŒ์ž„ ๋งต์˜ ์šฐ์ธก ํ•˜๋‹จ์ธ (n, m) ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค.



๋ฐ˜์‘ํ˜•