와챠의 우당탕탕 코딩 일기장

[백준]탈옥/9376 풀이 JAVA 본문

코딩 일기장/백준

[백준]탈옥/9376 풀이 JAVA

minWachya 2021. 8. 9. 20:47
반응형

문제

상근이는 감옥에서 죄수 두 명을 탈옥시켜야 한다.

이 감옥은 1층짜리 건물이고, 상근이는 방금 평면도를 얻었다.

평면도에는 모든 벽과 문이 나타나있고, 탈옥시켜야 하는 죄수의 위치도 나타나 있다.

감옥은 무인 감옥으로 죄수 두 명이 감옥에 있는 유일한 사람이다.

문은 중앙 제어실에서만 열 수 있다.

상근이는 특별한 기술을 이용해 제어실을 통하지 않고 문을 열려고 한다.

하지만, 문을 열려면 시간이 매우 많이 걸린다.

두 죄수를 탈옥시키기 위해서 열어야 하는 문의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스의 수는 100개를 넘지 않는다.

첫째 줄에는 평면도의 높이 h와 너비 w가 주어진다. (2 ≤ h, w ≤ 100)

다음 h개 줄에는 감옥의 평면도 정보가 주어지며, 빈 공간은 '.', 지나갈 수 없는 벽은 '*', 문은 '#', 죄수의 위치는 '$'이다.

상근이는 감옥 밖을 자유롭게 이동할 수 있고, 평면도에 표시된 죄수의 수는 항상 두 명이다.

각 죄수와 감옥의 바깥을 연결하는 경로가 항상 존재하는 경우만 입력으로 주어진다.

출력

각 테스트 케이스마다 두 죄수를 탈옥시키기 위해서 열어야 하는 문의 최솟값을 출력한다.

 

풀이


털썩.......................

이 문제 최근에 재채점된 문젠가?

풀이 방법을 생각해내는 게 넘 어려워서 다른 사람들 풀이 봤는데

그대로 풀면 틀렸다고 나오는 거다?

 

뭐가 틀린지 모르겠어서 뭐가 틀렸나 하나하나 없애고 추가하고 해보니까

map 초기화를 -1로 한 게 문제였다.

-1아니라 10000(=INF)으로 하니까 문제가 바로 풀렸다.

 

근데 꼭 10000일 필요는 없는듯 하다. 넉넉하게 h*w 정도면 되는듯

왜냐면

 

// 힌 번도 간 적 없거나 더 적은 문을 열고 갈 수 있는 곳이라면
if (dist[nextRow][nextCol] == INF || dist[nextRow][nextCol] > dist[point.x][point.y])

 

위 코드에서 INF가 -1일 때,

dist[nextRow][nextCol]가 -1이 아니고 dist[point.x][point.y]이 -1일때 오류가 날 수 있기 때문이다.

(한 번도 간 적 없는 검사를 제대로 수행하지 못하는 문제 발생)


이것보다 메모리 적게 들고 시간도 적게 걸리는 풀이도 있긴 한데

이건 좀 더 이해를 해야할듯하다.

 

이거,,, 너무 어려워서 찔끔찔끔 하다보니 일주일 걸림ㄷ

그래도 해결해서 기분이 너무 좋다!!!!!!!

 

반응형
Comments