이 영역을 누르면 첫 페이지로 이동
자라자 블로그의 첫 페이지로 이동

자라자

페이지 맨 위로 올라가기

자라자

개발자를 준비하는 자라자의 블로그입니다.

백준 3055번 탈출 파이썬

  • 2022.02.09 17:44
  • PS/BOJ

백준로고

[문제 링크]

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

[입출력 예]

입력 출력
3 3
D.*
...
.S.
3

[소스코드]

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

dx=[1,0,-1,0]
dy=[0,1,0,-1]

r, c = list(map(int,input().split()))

board1 = []
Dx, Dy , Sx,Sy=0,0,0,0
water=deque()

for i in range(r):
    tmp=list(input().rstrip())
    for j in range(c):
        if tmp[j]=='D':
            Dx =i
            Dy =j
        if tmp[j]=='S':
            Sx = i
            Sy = j
        if tmp[j]=='*':
            water.append((i,j))
    board1.append(tmp)

board2 = [item[:] for item in board1]

for waterPos in water:
    board1[waterPos[0]][waterPos[1]]=0



while (water):

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

        if ( nx<0 or nx >=r or ny < 0 or ny >=c): continue
        if ( board1[nx][ny]=='D' or board1[nx][ny]=='X' or str(board1[nx][ny]).isdigit()): continue

        board1[nx][ny]=board1[x][y]+1

        water.append((nx,ny))


board2[Sx][Sy]=0

hog = deque()
hog.append((Sx,Sy))


while(hog):
    x,y= hog.popleft()
    for i in range(4):
        nx= x+ dx[i]
        ny= y+ dy[i]

        if ( nx<0 or nx >=r or ny < 0 or ny >=c): continue
        if (board2[nx][ny]=='X' or str(board2[nx][ny]).isdigit() or (str(board1[nx][ny]).isdigit()and board1[nx][ny]<=board2[x][y]+1) ): continue

        board2[nx][ny]=board2[x][y]+1
        if (board1[nx][ny]=='D') : break


        hog.append((nx,ny))


if (board2[Dx][Dy]=='D') :print('KAKTUS')
else : print(board2[Dx][Dy])



'PS > BOJ' 카테고리의 다른 글

백준 1182 부분수열의 합 파이썬 풀이  (0) 2022.02.12
백준 2178 미로탐색 C++  (0) 2022.02.10
백준 15683 감시 C++  (0) 2022.02.09
백준 9663 N-Queen  (0) 2022.02.09
백준 1780번 종이의 개수 풀이  (0) 2022.02.09

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 백준 1182 부분수열의 합 파이썬 풀이

    백준 1182 부분수열의 합 파이썬 풀이

    2022.02.12
  • 백준 2178 미로탐색 C++

    백준 2178 미로탐색 C++

    2022.02.10
  • 백준 15683 감시 C++

    백준 15683 감시 C++

    2022.02.09
  • 백준 9663 N-Queen

    백준 9663 N-Queen

    2022.02.09
다른 글 더 둘러보기

정보

자라자 블로그의 첫 페이지로 이동

자라자

  • 자라자의 첫 페이지로 이동

검색

메뉴

  • 🏠 HOME
  • 💡 ABOUT
  • 💻 GITHUB

카테고리

  • 분류 전체보기 (91)
    • Tech Note (3)
    • Dev Log (11)
    • Study Log (11)
    • Settings (3)
    • PS (53)
      • Programmers (21)
      • BOJ (32)
    • Diary (10)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 리액트
  • ㅣ
  • 공식문서읽기

나의 외부 링크

정보

자라자의 자라자

자라자

자라자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 자라자. Designed by Fraccino.

티스토리툴바