인프런 커뮤니티 질문&답변

이명운님의 프로필 이미지
이명운

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3-D와 반례

#3-D 반례 질문

작성

·

311

2

http://boj.kr/be44657dbfb64b30ace731e5969c0771

3-D 번 문제 질문드립니다

계속해서 84%에서 틀렸다고 해서 많은 반례들을 넣어봤는데도 해결이 되지 않아 질문드립니다.

제가 풀이한 방식은 우선 선생님처럼 사람 visited 배열, 불 visited 배열 두가지를 만들어 따로 처리해주었고, 하나의 queue를 이용하여 먼저 불을 넣고 그 다음 사람을 넣어서 while 루프를 돌려서 최단거리를 찾았습니다.

만약 사람이 이동하는 곳에 불이 이미 있으면 이동하지 않고, 불이 없고 벽도 없을경우 이동하고 만약 이동한 곳이 가장자리이면 탈출하여 최단거리를 출력하는 방식입니다. 또한 bfs이므로 가장 처음 나오는 답이 최단거리라 판단하여 곧바로 break를 걸고 출력하였습니다.

답변 3

1

이명운님의 프로필 이미지
이명운
질문자

아 해결하였습니다.

시작부터 바로 탈출가능하면 1을 출력해야 하는데 0을 출력하게 코드를 작성했었습니다. 정말 많은 생각을 했었는데 그것을 통해 큰 배움을 얻었습니다.

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 명운님 ㅎㅎ

 

아 해결하셨네요.. ㅎㅎ

제가 봤을 때 솔직히 틀린 로직이 없었습니다.

queue에다 불을 먼저 다 넣어서 불 >> 사람 이렇게 무조건 가는 로직을 구현한점.

불을 -1로 둬서 구별한점 등이 다 좋았고.

if문이나 이런 로직도 훌륭하셨습니다.

 

저도 이게 왜 틀리지 하면서 계속해서 시도해봤습니다.

image

제가 먼저 탈출가능했을 때 1 출력하는거를 체크했어야 했는데 아쉽네요. ㅎㅎ

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

이명운님의 프로필 이미지
이명운
질문자

매번 정말 감사합니다! 선생님 믿으며 열심히 해나가겠습니다

0

안녕하세요, 인프런 AI 인턴이에요.

#3-D 문제에 대해 질문하시는 거죠? visited 배열, 불 visited 배열을 선언하고 bfs를 구현한 것 같은데, 여전히 84%에서 에러가 발생한다는 것이군요. 문제에서 제시된 모든 테스트 케이스를 통과하지 못한다면, 일반적인 예외 상황에 대해 분석해봐야 할 것 같아요.

예를 들어, bfs 큐를 구현할 때, 불과 사람을 번갈아 가면서 넣는다면, 같은 자리에 불과 사람이 동시에 출현할 수도 있지 않나요? 그 경우에 대한 처리는 어떻게 하셨는지 확인해보시는 것도 좋을 것 같아요.

다른 예외 상황으로는, 가장자리를 잘못 구현한 경우가 있을 수 있습니다. 문제에서는 벽이 있다고도 하고, 만약 벽인 경우를 잘못 처리하셨다면, 반례를 찾기가 어려울 수 있습니다.

이렇게 각 조건에 대해 디버깅을 하며 어떤 문제가 발생하고 있는지 잘 찾아보시면서 코드 수정을 해보세요. 이해하지 못하는 부분이 있으면 다시 질문해주세요. 감사합니다.

이명운님의 프로필 이미지
이명운

작성한 질문수

질문하기