아닙니다. 말씀하신 것은 애초에 BFS의 정의에 맞지 않는 탐색 방법입니다. BFS는 무조건 큐에 들어간 순서대로 뽑아야 하는 것이고, 이미 큐에 들어가있는데 나중에 더 정점 번호가 작은 것이 들어왔다고 해서 자리가 바뀌어야 하는 것이 아닙니다. 큐에 들어온 순서대로 뽑는 것은 정해져 있는 것이며, 그 조건 내에서 가능한 정점 번호가 작은 것부터 뽑아야 하므로 큐에 넣을 때만 정점 번호가 작은 순서대로 넣으면 됩니다.
1260번 - DFS와 BFS
원글 작성하신 분의 주장은 옳은 문제 제기입니다. 문제의 의도가 BFS로 너비를 구한 이후 추가적인 정렬을 원하는 것은 아니기 때문에, 지문을 수정하는 것이 좋겠습니다.
다만 지문을 의도대로 바꾸는 것이 상당히 까다로울 것으로 보입니다. 문제의 의도에 맞게 지문을 수정하면 다음과 같습니다.
정점 V와 연결된 정점 n에 대해 n의 너비를 주어진 정점 V로부터의 최단 거리로 정의한다. 이때 BFS에 대해서는 출력된 순서가 다음을 만족해야 한다.
- 출력된 정점 n은 모두 V와 연결되어 있어야 한다.
- 정점 n의 너비가 정점 m의 너비보다 작다면, n은 m보다 먼저 출력되어야 한다.
- 서로 같지 않은 정점 n의 너비와 정점 m의 너비가 b로 같고, 정점 n과 간선으로 직접 연결된 모든 너비 b - 1의 정점 중 가장 먼저 출력된 정점이 정점 m과 간선으로 직접 연결된 모든 너비 b - 1의 정점 중 가장 먼저 출력된 정점보다 먼저 출력되었다면, n은 m보다 먼저 출력되어야 한다.
- 서로 같지 않은 정점 n의 너비와 정점 m의 너비가 b로 같고, 정점 n과 간선으로 직접 연결된 모든 너비 b - 1의 정점 중 가장 먼저 출력된 정점이 정점 m과 간선으로 직접 연결된 모든 너비 b - 1의 정점 중 가장 먼저 출력된 정점과 같으며, n의 정점 번호가 m의 정점 번호보다 작으면, n은 m보다 먼저 출력되어야 한다.
위 조건을 만족하는 순서의 존재성과 유일성이 보장된다.
이 지문 자체는 정확하지만 아무래도 초심자 분들이 문제를 그냥 풀기에는 매우 난해한 설명으로 보이니, 노트 정도에 "큐를 이용해서 BFS를 짤 때, 정점 번호를 작은 것부터 순서대로 넣으면 문제의 조건을 만족하는 순서를 출력할 수 있다." 정도의 문장을 넣는 것이 좋아 보입니다.
댓글을 작성하려면 로그인해야 합니다.
some256 4년 전 1
방문할 수 있는 정점이 여러 개인 경우 정점 번호가 작은 것 부터 먼저 방문해야 합니다. 현재 채점은 이 조건 하에서 BFS를 올바르게 구현하고 있지 않은 것으로 보입니다. 다음 단계에 방문할 수 있는 정점 중 번호가 작은 것 부터 선택되어야 하지만 현재는 채점은 이런 방식이 아닙니다. 아래 예제를 BFS로 풀어보겠습니다.
9 8 9
9 6
9 8
9 7
6 5
6 4
8 1
8 2
7 3
BFS로 푼다면 다음과 같아야 합니다. 여기서 Q는 Queue이며 P는 Printed를 의미합니다. Queue 내 괄호는 다음 단계에 방문할 정점을 나타냅니다.
Q: 9
P:
Q: (6 7 8)
P: 9
Q: 7 8 (4 5)
P: 9 6
Q: 8 (3 4 5)
P: 9 6 7
Q: (1 2 3 4 5)
P: 9 6 7 8
...
Q:
P: 9 6 7 8 1 2 3 4 5
다음 단계에 방문할 수 있는 정점 숫자가 작은 것부터 선택되어야 하기에 위와 같이 BFS가 이루어져야 합니다. 현재 채점 출력은 아래와 같습니다.
P: 9 6 7 8 4 5 3 1 2
채점 번호 17564687가 정답으로 간주되어야 합니다.