예꾸
개발자국
예꾸
전체 방문자
오늘
어제
  • 분류 전체보기 (111)
    • CS (6)
      • 데이터베이스 (5)
      • 운영체제 (0)
      • Computer Architecture (1)
    • 끄적끄적 (4)
    • 이론 (29)
      • 알고리즘 (18)
      • 자료구조 (4)
      • WEB (2)
      • JS (2)
      • Git (2)
      • Python (1)
    • 면접준비 (3)
      • Vue (1)
      • Design Pattern (1)
      • Frontend (1)
    • 개발기술 (20)
      • Git PUSH 자동화 (3)
      • VUE (1)
      • Linux (2)
      • MERN Stack (2)
      • React기반 Gatsby로 블로그 개발하기 (6)
      • Typescript (0)
      • 감정일기장(React) (3)
      • CI CD (3)
    • 코드트리 (6)
      • 블로그 챌린지 (3)
      • 모의시험 (3)
    • 취업준비 (3)
      • 코딩테스트 후기 (3)
    • 프로그래머스 (8)
      • SQL (7)
      • 알고리즘 (1)
    • 백준 (31)
      • 그리디(탐욕법) (6)
      • 구현 (5)
      • 그래프탐색(dfs, bfs) (5)
      • 완전탐색 (5)
      • 문자열 (5)
      • 누적합 (2)
      • DP(다이나믹 프로그래밍) (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 운영체제
  • 백준 완전탐색
  • 알고리즘
  • 컴퓨터 시스템의 구조
  • javascript
  • 프로그래머스 SQL
  • gatsby
  • JS
  • 나만의공부노트
  • 코드트리
  • 코딩테스트
  • 백준 문자열
  • 코딩테스트실력진단
  • 프로그래머스
  • 백준 구현
  • 코드트리 추천
  • React
  • 백준 그리디
  • 자료구조
  • 백준 그래프탐색

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
예꾸

개발자국

[백준 2178] (bfs)미로탐색 - python
백준/그래프탐색(dfs, bfs)

[백준 2178] (bfs)미로탐색 - python

2021. 6. 6. 19:36

https://www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

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

www.acmicpc.net

 

문제풀이

  • 미로탐색처럼 최소한의 경로로 이동해야하는 경우는 bfs를 이용해 문제를 푸는 것이 효율적
  • dx와 dy로 상하좌우를 탐색할 수 있도록 했고, visited를 이용해 지나온 경로는 탐색하지 않도록 했습니다
  • 저는 bfs함수를 만들어 사용했는데 다른 사람 코드를 보니 함수를 짜지 않은게 더 눈에 잘 보였습니다

나의 풀이

# 최소를 찾는 문제 = bfs
# 나의 풀이
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]

from collections import deque

def bfs(miro, visited, n, m, x, y, result):
    global dx, dy
    # print(visited)
    visited[y][x] = 1
    queue = deque([(x, y)])
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if nx == m and ny == n and visited[ny][nx] < result:
                visited[ny][nx] = visited[y][x] + 1
                return visited[ny][nx]
            if 0 <= nx <= m and 0 <= ny <= n:
                if visited[ny][nx] == 0 and miro[ny][nx] == 1:
                    # print(ny, nx)
                    queue.append((nx, ny))
                    visited[ny][nx] = visited[y][x] + 1
    # return result



n, m = map(int, input().split())
miro = [list(map(int, input())) for _ in range(n)]
visited = [[0]*m for _ in range(n)]
n, m = n-1, m-1
result = 987654321
# print(visited)
print(bfs(miro, visited, n, m, 0, 0, result))

 

다른 사람 풀이

# 다른 사람풀이
from sys import stdin
from collections import deque

n, m = map(int, input().split())
matrix = [stdin.readline().strip() for _ in range(n)]
visited = [[0 for _ in range(m)] for _ in range(n)]

dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
visited[0][0] = 1
queue = deque([(0, 0)])

while queue:
    x, y = queue.popleft()
    if x == n-1 and y == m-1:
        print(visited[x][y])
        break
    for i in range(4):
        nx = x + dx[i]
        ny = x + dy[i]

        if 0 <= nx < n and 0 <= ny < m:
            if visited[nx][ny] == 0 and matrix[nx][ny] == '1':
                visited[nx][ny] = visited[nx][ny] + 1
                queue.append((nx, ny))

 

    '백준/그래프탐색(dfs, bfs)' 카테고리의 다른 글
    • [백준 1352] (bfs)효율적인 해킹 - python
    • [백준 11725] (bfs)트리의 부모 찾기 - python
    • [백준 1206] DFS와 BFS - python
    • [백준 2606] (bfs)바이러스 - python
    예꾸
    예꾸
    비전공자 옒의 개발이야기💻

    티스토리툴바