인프런 커뮤니티 질문&답변
3-K 질문있습니다.
해결된 질문
작성
·
29
0
안녕하세요 큰돌님:)
http://boj.kr/b242ee3c08074321874c8a8c4a09c09e
위와 같이 코드를 작성했습니다.
시간 초과를 생각해서 물인 부분을 모두 queue에 담았고 그 다음 이전 수업에서 알려주신 qsize를 정의해서 유사 플루드필(?)을 진행했습니다.
영상을 보니 백조가 있는 위치도 물로 지정해야 함을 이해했습니다. 다만 이 코드에서 시간 초과가 나는 이유는 백조의 탐색이 매번 이어지기 때문인가요?
답변 2
0
안녕하세요 원재님 ㅎㅎ
네 맞습니다.
이문제는 정말 시간초과가 빡센 문제라서... 하나라도 비효율적인 코드가 있으면 안됩니다.
while(true) {
memset(visited, 0, sizeof(visited));
dfs(swanList[0].first, swanList[0].second, 1);이부분이 비효율적이여서 시간초과가 나는 것 같습니다. 매번 초기화를 진행하지 말고 -> 진행한 visited 시점에서 초기화를 진행하지말고 그 시점에서 나아가면서 차곡차곡 visited를 채우는 식으로 진행하게 해주세요
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. 원재님.
백조의 위치를 물로 지정하고 시작하는 것은 BFS 초기화를 보다 효율적으로 하는 방법이며 이를 통해 탐색의 시작점을 줄일 수 있습니다. 하지만 시간 초과 문제는 여러 곳에서 발생할 수 있습니다. 구체적으로는 아래와 같은 방법으로 문제를 확인하고 해결할 수 있습니다.
큐 초기화 및 복사 비용 줄이기: 매 반복마다 큐의 상태를 전부 초기화하거나 복사하는 과정이 비효율적으로 동작할 수 있습니다. 이를 줄이는 방법 중 하나는 백조와 물의 상태를 별도의 큐로 관리해놓고, 매 사이클마다 갱신하는 것입니다.
방문 배열 활용: 방문 체크를 위해 사용되는 배열의 초기화와 갱신을 최적화해야 합니다. 예를 들어, 새로 방문한 위치만 별도로 기록하고, 매번 전체 배열을 초기화하지 않는 것이 좋습니다.
반복적인 탐색 로직 개선: 두 백조가 만날 수 있는 가능성을 매번 탐색하는 것은 시간 낭비가 클 수 있습니다. 즉 이미 탐색이 완료된 지점은 다시 탐색하지 않도록 체크해야 합니다.
관련 질문과 유용한 답변들이 있어 추가적인 최적화 방법을 참고하기에 좋은 게시물을 추천드립니다:
- 3-K 코드 질문있습니다: BFS의 시간 복잡도를 최적화하는 다양한 테크닉이 다루어져 있으며, 플러드필과 효율적인 큐 사용법에 대해 자세히 설명되어 있습니다.
이 해답들은 시간 초과를 줄이기 위한 다양한 기법들을 소개하고 있으며, 이를 통해 보다 빠르고 효율적으로 답안을 개선할 수 있는 방법들을 발견할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





