Algorithm/DFS BFS

[Backjoon] 2178 - 미로탐색 (BFS)

2024. 12. 30. 23:27
목차
  1. 0. 문제
  2. 1. 답

 

0. 문제

'''
N×M크기의 배열로 표현되는 미로가 있다.
미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다.
이러한 미로가 주어졌을 때,
(1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오.
한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다.
칸을 셀 때에는 시작 위치와 도착 위치도 포함한다.

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다.
다음 N개의 줄에는 M개의 정수로 미로가 주어진다.
각각의 수들은 붙어서 입력으로 주어진다.

첫째 줄에 지나야 하는 최소의 칸 수를 출력한다.
항상 도착위치로 이동할 수 있는 경우만 입력으로 주어진다.
'''
'''
4 6
101111
101010
101011
111011
>> 15

4 6
110110
110110
111111
111101
>> 9

2 25
1011101110111011101110111
1110111011101110111011101
>> 38

7 7
1011111
1110001
1000001
1000001
1000001
1000001
1111111
>> 13
'''

 

 

1. 답

import sys
from collections import deque

sys.stdin = open("input.txt", "r")

# 최단거리 문제는 bfs 로 품!!
def bfs(sx, sy, ex, ey):
    # q, v 초기화
    q = deque()
    v = [[0] * M for _ in range(N)]

    # 시작점 큐에 넣고 방문 처리
    q.append((sx, sy))
    v[sx][sy] = 1

    # 큐가 다 빌 때까지 반복
    while q:
        # 최하단 값 꺼내기
        x, y = q.popleft()

        # 목적지 여부 확인 및 정답 반환
        if (x, y) == (ex, ey):
            return v[x][y]

        # 4방향 비교 -> 조건 맞으면 큐 삽입 및 방문 처리
        for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
            nx, ny = x + dx, y + dy
            # 범위 안에 있고, 갈 수 있는 길이며, 아직 방문하지 않은 곳이면
            if 0 <= nx < N and 0 <= ny < M and miro[nx][ny] == 1 and v[nx][ny] == 0:
                q.append((nx, ny))
                v[nx][ny] = v[x][y] + 1


# 하나씩 나눠서 변수에 담기 -> split()
N, M = map(int, sys.stdin.readline().split())
# 한 줄 통째로 받기 -> strip() 
# 101111 -> [1, 0, 1, 1, 1, 1]
miro = [list(map(int, sys.stdin.readline().strip())) for _ in range(N)]
v = [[0 for _ in range(M)] for _ in range(N)]

print(bfs(0, 0, N -1, M -1))

 

혼자서 풀어보려고 노력해봤지만 잘 안됐다 ㅠ

그래서 해설 영상을 찾아서 보고... 안보고 쳐보는 방식으로 해서 겨우겨우 통과했다.

BFS 문제를 많이 연습해봐야겠다!

그리고 손코딩을 먼저 하도록 습관을 들여봐야겠다.

바로 코드를 치려고 하니까 생각전개도 잘 안되고 막막하고 답답하더라.

물론? 손코딩 해도 뭐가 안되긴 함...

하다보면 어떻게든 손에 익겠지 뭐~

 

 

저작자표시 비영리 동일조건 (새창열림)
  1. 0. 문제
  2. 1. 답
'Algorithm/DFS BFS' 카테고리의 다른 글
  • [Backjoon] 2667 - 단지번호붙이기 (BFS)
  • [Backjoon] 2606 - 바이러스 (DFS)
  • [Backjoon] 1026 - DFS와 BFS (sys.stdin.readline())
  • [이.코.테] DFS/BFS
함s
함s
개발함
함s
함함ː
함s

CALENDAR

«   2025/08   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
  • 분류 전체보기 (211)
    • TIL (4)
      • thought (2)
    • Algorithm (81)
      • Basic (66)
      • Greedy (5)
      • Implementation (3)
      • DFS BFS (7)
      • Sorting (0)
    • Front (30)
      • HTML Css (7)
      • JavaScript (18)
      • Jquery (2)
      • Vue.js (2)
      • React.js (1)
    • Node.js (5)
    • Java (43)
      • Basic (22)
      • MVC -- JSP & Servlet (18)
      • Handler (1)
      • Data (2)
    • Spring (27)
      • Spring_inflearn (9)
      • Spring Boot (7)
      • MyBatis (1)
      • Spring Data JPA (7)
      • REST API (3)
    • SQL (2)
    • Mac (13)
    • Git (4)
    • Project (0)

블로그 메뉴

  • 홈
  • 방명록
  • 글쓰기

인기 글

최근 글

hELLO · Designed By 정상우.
함s
[Backjoon] 2178 - 미로탐색 (BFS)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.