작성
·
113
0
안녕하세요, 피자 배달거리 질문드립니다.
처음에는 제가 강의에서 풀어주신 코드와 유사한 방식으로 작성했었는데 정답은 맞게 나오지만 제출해보면 자꾸 시간 초과가 떠서..
강의를 보면서 완전히 같은 코드로 고쳐봤는데도 시간 초과가 뜨네요ㅠㅠ
혹시 이 코드에 문제점이 뭔지 답변 주시면 감사하겠습니다!
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Points {
int x,y;
Points(int x, int y) {
this.x= x;
this.y = y;
}
}
public class Main {
static int n, m, len = 0;
static int answer = Integer.MAX_VALUE;
static int[] ch;
static List<Points> pizzaDis, homes;
// 피자 배달거리
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
pizzaDis = new ArrayList<>();
homes = new ArrayList<>();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int num = in.nextInt();
if (num == 2) {
pizzaDis.add(new Points(j, i));
} else if (num == 1) {
homes.add(new Points(j,i));
}
}
}
len = pizzaDis.size();
ch = new int[m];
dfs(0,0);
System.out.println(answer);
}
static void dfs(int level, int start) {
if (level == m) {
int sum = 0;
for (Points h : homes) {
int min = Integer.MAX_VALUE;
for (int p : ch) {
min = Math.min(min, Math.abs(h.x - pizzaDis.get(p).x) + Math.abs(h.y - pizzaDis.get(p).y));
}
sum += min;
}
answer = Math.min(sum, answer);
} else {
for (int i = start; i < len; i++) {
ch[level] = i;
dfs(level + 1 ,start + 1);
}
}
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다, Mt.K님.
문제 “피자 배달 거리”에 대한 시간 초과 이슈를 해결하는 데 있어, 여러 비슷한 질문들에서 공통적으로 지적된 부분이 있습니다. 이 문제는 주로 DFS(깊이 우선 탐색) 함수 내에서 재귀 호출을 하는 방식에서 발생하는 것으로 보입니다.
질문자님의 코드에서 dfs(level + 1, start + 1);
호출 부분에 주목해야 합니다. 기존 답변에서 지적된 바에 따르면, 이 부분에서 start+1
대신에 i+1
을 사용해야 올바른 조합을 생성하며, 이를 통해 탐색 범위를 제대로 제한하여 시간 초과 문제를 방지할 수 있습니다.
비슷한 문제에 대한 과거 질문에 대한 답변 중에서 핵심적인 지적이 있었습니다:
- “피자배달거리”에서는 DFS(L + 1, s + 1);
가 DFS(L + 1, i + 1);
로 수정되어야 한다고 설명되었습니다.
- 또 다른 관련 질문 “피자배달거리(DFS) 시간초과 질문 있습니다.”에서도 유사한 문제가 지적되었으며, 정확한 재귀 호출 방법이 강조되었습니다.
- “시간 초과” 문제 해결을 위해서도, DFS(index+1, start+1);
가 아닌 DFS(index+1, i+1);
으로 수정되어야 한다는 답변이 제공되었습니다.
이러한 지적들을 종합해볼 때, 질문자님의 코드에서도 dfs(level + 1, start + 1);
부분을 dfs(level + 1, i + 1);
로 수정하면 문제를 해결할 수 있을 것으로 예상됩니다.
자세한 참고를 위해 위 질문에서 언급된 피자배달거리 문제에 대한 기존 답변을 참고해 보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아..! 저 부분때문에 그랬군요.
이해 했습니다!
빠른 답변 감사드립니다!!