타임에러가 왜 나타나는지 모르겠습니다
140
작성한 질문수 3
static void solution(Queue<Point> q, int[][] box) {
while (!q.isEmpty()) {
// int len = q.size();
// for (int i = 0; i < len; i++) {
Point tmp = q.poll();
for (int j = 0; j < 4; j++) {
int nx = tmp.x + dx[j];
int ny = tmp.y + dy[j];
if (nx >= 0 && ny >= 0 && nx < n && ny < m && box[nx][ny] == 0) {
box[nx][ny] = 1;
q.offer(new Point(nx, ny));
dis[nx][ny] = dis[tmp.x][tmp.y] + 1;
}
// }
}
}
}위에서 주석처리된 queue의 사이즈를 구한 후 레벨 탐색(?)으로 진행하게 되면 타임에러가 발생하는데 왜 발생하는지 모르겠습니다. 성능 차이가 많이 나나요 ?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
Java에서 타임 에러가 발생하는 주된 이유 중 하나는 효율성 문제로 인하여 주어진 시간 내에 코드가 종료되지 않을 때입니다. 주석 처리된 부분을 포함하여 레벨 탐색(너비 우선 탐색 - BFS)을 진행하게 되면, 각 레벨마다의 요소를 처리하기 위해 추가적인 반복문이 사용되어 시간 복잡도가 증가합니다.
주석 처리된 코드에서 int len = q.size(); 로 큐의 길이를 측정하고, 이를 기반으로 for문을 돌리게 되면, 현재 레벨에 대한 모든 요소들을 한 번에 처리할 수 있으나, 이 과정에서 매번 큐의 사이즈를 체크하고, 각 요소마다 인접한 요소를 탐색하여 큐에 추가하는 과정은 큐에 들어있는 요소의 수만큼 반복적으로 실행됩니다. 특히, 탐색해야 하는 공간이 크거나, 탐색 조건이 복잡할 경우, 이러한 반복 과정이 시간 복잡도를 크게 증가시켜 타임 에러를 유발합니다.
성능 차이가 발생하는 이유는 추가적인 반복문이 모든 요소를 순회하며, 각 요소에 대해 인접한 요소를 큐에 추가하는 동안, 큐의 크기가 계속 변하기 때문입니다. 이러한 과정은 많은 수의 요소가 큐에 들어가고 처리되어야 할 때, 특히 그래프의 규모가 클 때 매우 비효율적일 수 있습니다.
따라서, 레벨 별 탐색을 통해 문제를 해결하고자 할 때는, 시간 복잡도를 고려하여 최적화된 방법을 선택하는 것이 중요합니다. 만약 타임 에러를 해결하고 싶다면, 코드의 효율성을 개선할 다른 방법들을 찾아보는 것도 좋은 접근 방법이 될 수 있습니다.
원하는 답을 찾지 못하셨나요?
그럼 직접 문의해보시는 것도 좋은 방법이 될 수 있습니다.
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
33
1
갑자기 채점 사이트가 바뀌었어요
0
34
1
문제 리스트 페이지
0
29
1
채점 사이트 관련 질문드립니다
0
24
1
봉우리 문제 질문입니다
0
84
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
65
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
72
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
67
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
85
2
6-7 강의에서
0
48
1
6-6. 장난꾸러기 질문 있습니다.
0
46
1
강의 수강후 코딩테스트
0
111
1
answer 변수 사용 여부
0
46
1
2중 for문
1
85
2
2-11. 임시반장정하기 (Runtime Error)
0
63
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
70
1
이런 풀이는 어떨까요
0
44
1
자바 스트림 방식의 효율성 질문 드립니다.
0
57
1
알고리즘 자료 구조들..
0
63
1
StringBuilder vs BufferdWriter
0
48
1
원더랜드(프림)
0
50
1
이런 코드는 어떤가요?
0
61
1
bfs 풀이
0
57
1
병합정렬
0
57
1





