๋ฐฑ์ค€ 2206 | ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ [ํŒŒ์ด์ฌ]

2022. 8. 9. 22:23ยท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ
https://www.acmicpc.net/problem/2206

 

 

ํ’€์ด

์ฒ˜์Œ์— 14502๋ฒˆ - ์—ฐ๊ตฌ์†Œ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋งต(๊ทธ๋ž˜ํ”„)์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋Œ๋ฉด์„œ ๋ฒฝ์ด ์žˆ๋‹ค๋ฉด ๊ทธ ๋ฒฝ์„ ๋ถ€์ˆ˜๊ณ  bfs ๋Œ๋ ค๋ณด๊ณ  ์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋‹ค์‹œ ๊ทธ ์ž๋ฆฌ์— ๋ฒฝ์„ ์„ธ์šฐ๊ณ  ๋‹ค๋ฅธ ๋ฒฝ์„ ๋ถ€์ˆ˜์–ด๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ์ฝ”๋“œ๋ฅผ ์งฐ๋Š”๋ฐ, ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ฐ€ ๋‚˜์™”๊ณ  ๋‘ ๋ฒˆ์งธ ์‹œ๋„์—๋Š” ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค ๊ฐ€ ๋‚˜์™”๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๋„ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด ๋ฐฉ๋ฒ•์„ ๋ณด์•˜๊ณ  ๋˜, 2206๋ฒˆ ๋ฌธ์ œ FAQ ๊ธ€์ด ์žˆ๊ธธ๋ž˜ ๋ดค๋Š”๋ฐ...

 

์ผ๋‹จ ์ด ํ•ด๊ฒฐ ๋ฐฉ์‹์€ ์ •๋‹ต์ด ๋  ์ˆ˜ ์—†๋‹ค. ์ด์œ ๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๋‹ค. ์—ฐ๊ตฌ์†Œ ๋ฌธ์ œ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” N, M ๋ฒ”์œ„๊ฐ€ ์ž‘์•„์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐฉ๋ฌธํ•ด๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ํฌ์ง€ ์•Š์•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” N, M์˜ ๋ฒ”์œ„๊ฐ€ 1,000์ด๋ผ์„œ ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋„ 1000 * 1000 ์ด๋ผ๋Š” ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
๋‘ ๋ฒˆ์งธ๋Š” (N, M)์œผ๋กœ ๊ฐ€๋Š” ๊ธธ๋ชฉ์ด ๋ฒฝ์œผ๋กœ ๋ง‰ํ˜€์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๊ทธ ๋ฒฝ๊นŒ์ง€ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฒฝ์„ ๋ถ€์ˆœ ๊ฒฝ์šฐ์™€ ๋ถ€์ˆ˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‘˜ ์ค‘ ๋ถ€์ˆœ ๊ฒฝ์šฐ๊ฐ€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์ผ ๋•Œ, ์ด๋ฏธ ๋ฒฝ์„ ํ•œ ๋ฒˆ ๋ถ€์‰ˆ๊ธฐ ๋•Œ๋ฌธ์— (N, M)์œผ๋กœ ๊ฐˆ ์ˆ˜๊ฐ€ ์—†์–ด -1์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ํ˜„์žฌ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์ง€๊ธˆ ๋‹น์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ์•„๋‹์ง€๋ผ๋„ (N, M)์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ด๋ผ๋ฉด ๊ทธ ๊ฒฝ๋กœ๊ฐ€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ฒ˜์Œ ์ƒ๊ฐํ•ด๋‚ธ ๋ฐฉ๋ฒ•์€ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์ด ๋  ์ˆ˜ ์—†์—ˆ๋‹ค.

 

๊ทธ๋Ÿผ, ์ด์ œ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๋ฉด์„œ ์ •๋‹ต์„ ์ฐพ์•„๋ณด์ž. ๋จผ์ € ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ์ ์ธ ๋ชจ๋“  ์š”์†Œ์˜ ๋ฒฝ์„ ํ—ˆ๋ฌผ์–ด๋ณธ๋‹ค๋Š” ๋ฌด์ž‘์ • ํ—ˆ๋ฌผ๊ณ  bfs๋ฅผ ๋Œ๋ ค๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹Œ bfs๋ฅผ ๋จผ์ € ๋Œ๋ ค๋ณด๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ๊ฐ€๋Š” ๊ฒฝ๋กœ์— ๋ฒฝ์ด ์žˆ๊ณ , ์ด ๊ฒฝ๋กœ๋Š” ๋ฒฝ์„ ํ—ˆ๋ฌธ ์ ์ด ์—†๋‹ค๋ฉด ํ—ˆ๋ฌผ์–ด๋ณด์ž ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋งต(๊ทธ๋ž˜ํ”„) ๊ฐ๊ฐ์˜ ์š”์†Œ์— ๊ฒฝ๋กœ์— ๋”ฐ๋ผ "๋ฒฝ์„ ํ—ˆ๋ฌผ์—ˆ๋‚˜?" ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๊ณง ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋กœ ์ด์–ด์ง„๋‹ค. ์™œ๋ƒํ•˜๋ฉด (N, M) ์ง€์ ์ด ๋ฒฝ์œผ๋กœ ๋‘˜๋Ÿฌ์ ธ์žˆ์„ ๋•Œ (N, M) ์ง€์  ์•ž ๋ฒฝ๊นŒ์ง€ ์–ด๋–ค ๋ฒฝ์„ ํ—ˆ๋ฌผ๊ณ  ์˜จ ๊ฒฝ๋กœ์™€ ํ—ˆ๋ฌผ์ง€ ์•Š๊ณ  ์˜จ ๊ฒฝ๋กœ ์ค‘ ํ—ˆ๋ฌธ ๊ฒฝ๋กœ๊ฐ€ ๋” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ผ๋ฉด ์ด ๊ฒฝ๋กœ์˜ ๊ฐ๊ฐ์˜ ๊ธธ์€ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ๊ธฐ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ—ˆ๋ฌผ์ง€ ์•Š์€ ๊ฒฝ๋กœ๊ฐ€ ์žฌ๋ฐฉ๋ฌธ์„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ์ฆ‰, (N, M) ์ง€์ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๋ฒฝ์„ ํ—ˆ๋ฌธ ๊ฒฝ์šฐ์™€ ํ—ˆ๋ฌผ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‘˜๋กœ ๋‚˜๋ˆ„์–ด ์ฃผ๋ฉด ๋œ๋‹ค! ๊ทธ๋Ÿฌ๋ฉด ๋ฒฝ์„ ํ—ˆ๋ฌธ ๊ฒฝ์šฐ์— ๋จผ์ € ๋ฐฉ๋ฌธํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹คํ•ด๋„ ํ—ˆ๋ฌผ์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ๋’ค๋Šฆ๊ฒŒ ๋ฐฉ๋ฌธํ•˜์—ฌ (N, M) ์ง€์ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

์ •๋ฆฌํ•˜์ž๋ฉด, bfs ํƒ์ƒ‰์„ ๋Œ๋ฆฌ๋ฉด์„œ ๊ฐ๊ฐ์˜ ๊ฒฝ๋กœ์— ๋ฒฝ์„ ํ—ˆ๋ฌผ๊ณ  ๊ฐ€๋Š” ๊ฒฝ๋กœ์ธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ๊ฒฝ๋กœ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ—ˆ๋ฌผ๊ณ  ๊ฐ€๋Š” ๊ฒฝ์šฐ์ธ์ง€ ํ—ˆ๋ฌผ์ง€ ์•Š๊ณ  ๊ฐ€๋Š” ๊ฒฝ์šฐ์ธ์ง€ ๋‚˜๋ˆ„์–ด ํ‘œ์‹œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ณผ์ •์—์„œ (N, M) ์ง€์ ์œผ๋กœ ๋จผ์ € ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๋œ๋‹ค.

 

 

์ฝ”๋“œ

import sys, copy
from collections import deque
input = sys.stdin.readline

N, M = map(int, input().split())
path = [list(map(int, input().rstrip())) for _ in range(N)]
visited =[[[0, 0] for i in range(M)] for _ in range(N)]
wasd = ((0, -1), (0, 1), (-1, 0), (1, 0))

def bfs(start_x, start_y):
    queue = deque()
    queue.append([start_x, start_y, 0])

    visited[start_y][start_x][0] = True
    dist = copy.deepcopy(path)
    dist[start_y][start_x] = 1

    while queue:
        x, y, wall_break = queue.popleft()
        
        if x == M-1 and y == N-1:
            return dist[y][x]

        for xx, yy in wasd:
            xx += x
            yy += y

            if (0 <= xx < M) and (0 <= yy < N):
                if path[yy][xx] == 0:
                    if not visited[yy][xx][wall_break]:
                        queue.append([xx, yy, wall_break])
                        visited[yy][xx][wall_break] = True
                        dist[yy][xx] = dist[y][x] + 1
                elif path[yy][xx] == 1 and wall_break == 0:
                    if not visited[yy][xx][0]:
                        queue.append([xx, yy, wall_break + 1])
                        visited[yy][xx][0] = True
                        dist[yy][xx] = dist[y][x] + 1
    
    return -1

print(bfs(0, 0))

 

'์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

3190 - ๋ฑ€ [์„ฑ๊ณต(๋ฐ˜๋ก€ํžŒํŠธ)|02:14:43]  (0) 2024.08.09
๋ฐฑ์ค€ 12094 - 2048 (Hard) [ํŒŒ์ด์ฌ]  (0) 2022.11.22
๋ฐฑ์ค€ 12100 - 2048 (Easy) [ํŒŒ์ด์ฌ]  (2) 2022.11.20
๋ฐฑ์ค€ 1541 - ์žƒ์–ด๋ฒ„๋ฆฐ ์•”ํ˜ธ [์ž๋ฐ”]  (1) 2022.10.31
๋ฐฑ์ค€ 10026 | ์ ๋ก์ƒ‰์•ฝ [ํŒŒ์ด์ฌ]  (0) 2022.08.09
'์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€ 12094 - 2048 (Hard) [ํŒŒ์ด์ฌ]
  • ๋ฐฑ์ค€ 12100 - 2048 (Easy) [ํŒŒ์ด์ฌ]
  • ๋ฐฑ์ค€ 1541 - ์žƒ์–ด๋ฒ„๋ฆฐ ์•”ํ˜ธ [์ž๋ฐ”]
  • ๋ฐฑ์ค€ 10026 | ์ ๋ก์ƒ‰์•ฝ [ํŒŒ์ด์ฌ]
์œจ๋ฌด;
์œจ๋ฌด;
  • ์œจ๋ฌด;
    ๐ŸฅŠ
    ์œจ๋ฌด;
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (65)
      • ๊ฐœ๋ฐœ (30)
        • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค (13)
        • ์šด์˜์ฒด์ œ (12)
      • ๊ฐœ๋ฐœ์„œ์  (2)
        • ์ž๋ฐ”-์Šคํ”„๋ง ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ (28)
      • ๊ฒŒ์ž„๊ฐœ๋ฐœ (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    2048
    bsp
    ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค
    2048(Hard)
    ๊ฒŒ์ž„๊ฐœ๋ฐœ
    ๋ฐฑ์ค€
    BFS
    python
    ๋กœ๊ทธ๋ผ์ดํฌ
    ์ฝ”๋”ฉ
    ํŒŒ์ด์ฌ
    ์ด๊ฒƒ์ดC++์ด๋‹ค
    ๊ฐœ๋ฐœ์—ฐ์Šต
    ์šฐํ…Œ์ฝ”
    ์ž๋ฐ”
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    dfs
    ๊ฐœ๋ฐœ
    C++
    ์ด๋™์ƒ์„ฑ์ž
    ๋กœ๊ทธ
    ์ธ๋””๊ฒŒ์ž„
    ์…€๋ฃฐ๋Ÿฌ์˜คํ† ๋งˆํƒ€
    ๊ฒŒ์ž„
    ์ ˆ์ฐจ์ ์ƒ์„ฑ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์œจ๋ฌด;
๋ฐฑ์ค€ 2206 | ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ [ํŒŒ์ด์ฌ]
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”