알고리즘 문제풀이

백준 - 미로 탐색 2178 (Python)

2023. 3. 24. 22:05
목차
  1. 문제설명
  2. 입력
  3. 출력
  4. 예제입력 / 예제출력
  5. 문제이해 및 코드설명
  6. 코드
반응형
[Silver I] 미로 탐색 - 2178
https://www.acmicpc.net/problem/2178

 

문제설명

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개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

 

출력

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

 

 

예제입력 / 예제출력

 

문제이해 및 코드설명

N * M 의 크기의 배열이 주어지고 시작값이 1*1에서 시작한다면 N*M(가장 끝 배열) 까지 걸리는 최소 칸수를 구하는 문제이다. 이동가능 한 거리는 1이라고 주어 지며, 서로 인접한 곳만 갈수 있다는 조건이 있다(대각선 x).

그래프의 상하좌우를 탐색하며 진행하는 문제이기 때문에 bfs를 사용해서 문제를 해결해 보았다.

일반적인 bfs문제처럼 deque 자료구조를사용하였고, dx,dy를 통해 상하좌우를 탐색할수 있도록 사전에 설정해주었다.

무조건시작점이 1*1 이므로 graph에 0*0 지점을 기점으로 상하좌우를 보며 1인 경우 이동시키면서 값을 1씩 추가해주는 방식을 사용했다. N*M은 graph에서는 n-1 * m-1이므로 마지막에 위치에필요한 값을 출력해주었다.  

 

 

코드

import sys
from collections import deque

input = sys.stdin.readline

n, m = map(int, input().split())
graph = []

for _ in range(n):
    graph.append(list(map(int, input().rstrip()))) # readline의 경우 맨 뒤에 '\n'까지 입력받으므로 제거해줘야 함

# 상하좌우
dx = [-1, 1, 0, 0] 
dy = [0, 0, -1, 1]

def bfs(x, y):
    
    queue = deque()
    queue.append((x,y))

    while queue:
        x, y = queue.popleft()

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]

            if 0 <= nx < n and 0 <= ny < m and graph[nx][ny] == 1:
                queue.append((nx, ny))
                graph[nx][ny] = graph[x][y] + 1
    
    return graph[n-1][m-1]

print(bfs(0,0))

 

반응형

'알고리즘 문제풀이' 카테고리의 다른 글

백준 - 영역구하기 2583 (Python)  (0) 2023.04.07
백준 - 유기농 배추 1012 (Python)  (0) 2023.03.24
백준 - 그림 1926 (Python)  (0) 2023.03.24
백준 - N번째 큰 수 2075 (Python)  (0) 2023.03.24
백준 - 최소 힙 1927 (Python)  (0) 2023.03.24
  1. 문제설명
  2. 입력
  3. 출력
  4. 예제입력 / 예제출력
  5. 문제이해 및 코드설명
  6. 코드
'알고리즘 문제풀이' 카테고리의 다른 글
  • 백준 - 영역구하기 2583 (Python)
  • 백준 - 유기농 배추 1012 (Python)
  • 백준 - 그림 1926 (Python)
  • 백준 - N번째 큰 수 2075 (Python)
coryne
coryne
반응형
coryne
coryne의 정리노트
coryne
전체
오늘
어제
  • 분류 전체보기 (56)
    • python (2)
    • Web programing (1)
    • Linux (3)
    • Deep Learning (0)
    • 기타 (0)
    • 알고리즘 문제풀이 (49)
    • 빅데이터분석기사 (0)
    • 알고리즘 이론 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정수론
  • pandas
  • 그래프 이론
  • 출처 : eduatoz
  • 너비 우선 탐색
  • machine_learning
  • 수학
  • 깊이 우선 탐색
  • 큐
  • 자료구조
  • Python
  • 빅데이터분석기사
  • 그래프 탐색
  • 백준
  • 자료 구조(data_structures)
  • 소수 판정
  • 스택
  • 그리디 알고리즘
  • 자료 구조
  • 문자열
  • 플로이드-워셜
  • 브루트포스 알고리즘
  • 다이나믹 프로그래밍
  • 공공데이터일경험수련생
  • 정렬
  • 우선순위 큐
  • 구현
  • 빅데이터분석기사 실기
  • EduAtoZ
  • 데이크스트라

최근 댓글

최근 글

hELLO · Designed By 정상우.
coryne
백준 - 미로 탐색 2178 (Python)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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