알고리즘 연습

[백준_BOJ] 3055. 탈출 _ Java

코딩하는 너구리 2019. 10. 9. 01:52
반응형

문제

 

풀이

BFS를 활용해야 하는 문제입니다.

주어진 맵 정보에 대하여 매 시간별 물이 차오르는 정보를 업데이트 해주어야 하고, 고슴도치는 한 칸씩 이동할 수 있습니다.

따라서 저는 먼저 fire() 함수를 통해 물이 차오르는 범위를 업데이트를 해준 뒤,

     bfs 함수로 고슴도치가 한 칸씩 이동할 수 있도록 해주었습니다.

 

※ 주의할 점 하나는 물이 차오른 뒤에 고슴도치를 이동시켜야 정상적으로 이동할 수 있기 때문에

 bfs 함수 실행 전 fire 함수를 먼저 실행해주었습니다.

 

※ 주의할 점 두 번째로는 고슴도치가 비버의 굴로 이동할 수 없는 경우도 발생하기 때문에

  이동하지 못하는 경우와 이동할 수 있는 경우를 위해 flag 변수를 활용하였습니다.

   while문의 조건으로 1. 아직 도달하지 못했을 때  ( ! flag )

        bq가 비었을 때  ( !bq.isEmpty( ) )를 줘서 도달한 경우 ( flag == true ) 정상 종료하도록 하였고

       모두 진행하였지만 도달하지 못한 경우 ( bq,isEmpty( ) ) 모두 종료할 수 있도록 해주었습니다.

 

 

 

 

코드 

 

 

출처

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

 

3055번: 탈출

문제 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제일 친한 친구인 비버의 굴로 가능한 빨리 도망가 홍수를 피하려고 한다. 티떱숲의 지도는 R행 C열로 이루어져 있다. 비어있는 곳은 '.'로 표시되어 있고, 물이 차있는 지역은 '*', 돌은 'X'로 표시되어 있다. 비버의 굴은 'D'로, 고슴도치의 위치는 'S'로 나

www.acmicpc.net

 

반응형