9328번 - 열쇠
9328번 알고리즘 로직 질문드립니다.
대부분의 블로그 문제 풀이가,
탐색을하면서 문을 열고, 문을 열수 없다면 문 큐에 넣고, 열수 없었던 문의 열쇠를 찾으면
해당 문으로 이동하여, 탐색을 진행하는 로직으로 짜여있는걸 확인하였습니다.
하지만 , 저같은 경우는 문제 풀이를 할 때, 조금 다른 방향으로 접근 하였습니다.
visited 행렬을 따로 두고, visited 행렬에 보유한 key의 갯수값을 저장함으로써
방문 했음 여부를 나타내었고
이 문제의 주된 특징인 과거에 방문하였던 지점을 다시 방문해야할 경우를
이전에 방문했을 때보다 현재 방문할경우의 key의 갯수가 클때라 생각하여 (visited 값이 이전보다 클 경우)
이전에 방문했을 때보다 현재 방문할 경우의 key의 갯수가 클때만 해당 지점을 다시 방문할 수 있도록 하였습니다.
제 개인적인 생각으로는 전혀 문제될 것이 없는 로직인데 계속 '틀렸습니다'가 뜨는 이유를 잘 모르겠습니다 ㅠㅠ
실제 대회의 testcase를 돌려봤을 때, 대부분 정답 처리가 되었지만 몇몇 케이스의 경우가 정답보다 작은 값을 출력하는 경우가 존재하였습니다.
맵의 크기도 큰 편이라 디버깅 할 엄두도 안나네요 ㅠㅠ
유사한 문제라 생각하는
1194번 '달이 차오른다 가자' https://www.acmicpc.net/proble...
역시 이런 방식으로 풀었고 역시 오답 처리가 되어서 왜 이 풀이가 되지 않는지 궁금해졌습니다.
그럼 답변 기다리겠습니다 !!
반례 찾느라 재밌었습니다 :D 아래 데이터의 경우 b 열쇠를 얻은 직후에는 A 문을 열 수 없고, a 열쇠를 얻은 뒤에는 A 문을 열러 갈 수 없습니다.
감사합니다 ㅠㅠ 생각치도 못한 케이스네요 ...
1년이 넘은 글이긴 하지만 위의 반례는 a 열쇠를 얻고 나가서 다른 입구로 들어갈 수 있으니 답이 0이 아니라 1이 되어야 할 것 같습니다.
@dlaud5379
맨 아래 0은 key가 주어지지 않았다는 뜻입니다.
답은 1 맞습니다.
댓글을 작성하려면 로그인해야 합니다.
blackbbean 5년 전
9328번 알고리즘 로직 질문드립니다.
대부분의 블로그 문제 풀이가,
탐색을하면서 문을 열고, 문을 열수 없다면 문 큐에 넣고, 열수 없었던 문의 열쇠를 찾으면
해당 문으로 이동하여, 탐색을 진행하는 로직으로 짜여있는걸 확인하였습니다.
하지만 , 저같은 경우는 문제 풀이를 할 때, 조금 다른 방향으로 접근 하였습니다.
visited 행렬을 따로 두고, visited 행렬에 보유한 key의 갯수값을 저장함으로써
방문 했음 여부를 나타내었고
이 문제의 주된 특징인 과거에 방문하였던 지점을 다시 방문해야할 경우를
이전에 방문했을 때보다 현재 방문할경우의 key의 갯수가 클때라 생각하여 (visited 값이 이전보다 클 경우)
이전에 방문했을 때보다 현재 방문할 경우의 key의 갯수가 클때만 해당 지점을 다시 방문할 수 있도록 하였습니다.
제 개인적인 생각으로는 전혀 문제될 것이 없는 로직인데 계속 '틀렸습니다'가 뜨는 이유를 잘 모르겠습니다 ㅠㅠ
실제 대회의 testcase를 돌려봤을 때, 대부분 정답 처리가 되었지만 몇몇 케이스의 경우가 정답보다 작은 값을 출력하는 경우가 존재하였습니다.
맵의 크기도 큰 편이라 디버깅 할 엄두도 안나네요 ㅠㅠ
유사한 문제라 생각하는
1194번 '달이 차오른다 가자' https://www.acmicpc.net/proble...
역시 이런 방식으로 풀었고 역시 오답 처리가 되어서 왜 이 풀이가 되지 않는지 궁금해졌습니다.
그럼 답변 기다리겠습니다 !!