숲속의 기사
131
13 asked
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
예제는 통과해서 제출하니까 시간초과라고 뜨는데, 잘못 작성한건 가요??
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] argvs) {
Scanner sc = new Scanner(System.in);
int[] dx = {0,0,1,-1};
int[] dy = {1,-1,0,0};
Queue<int[]> q = new LinkedList<>();
int n=sc.nextInt();
int m=sc.nextInt();
int[][] map = new int[m][n];
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
map[i][j]=sc.nextInt();
}
}
boolean[][] visit = new boolean[m][n];
int[][] dist = new int[m][n];
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(map[i][j]==2 || map[i][j]==3) {
q.add(new int[] {i,j});
int L=0;
visit = new boolean[m][n];
visit[i][j]=true;
while(!q.isEmpty()) {
int len = q.size();
L++;
for(int k=0; k<len; k++) {
int[] tmp = q.poll();
for(int z =0; z<4; z++) {
int nx = tmp[0]+dx[z];
int ny = tmp[1]+dy[z];
if(nx>=0 && ny>=0&& nx<m && ny<n && map[nx][ny]!=1) {
if(!visit[nx][ny]) {
visit[nx][ny]=true;
dist[nx][ny]+=L;
q.add(new int[] {nx,ny});
}
}
}
}
}
}
}
}
int answer=Integer.MAX_VALUE;
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(map[i][j]==4 && dist[i][j]>0) {
answer = Math.min(answer, dist[i][j]);
}
}
}
System.out.print(answer);
}
}
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
xogh7532님, 코드를 보니 BFS를 사용하여 문제를 해결하려는 시도로 보입니다. 시간 초과 문제는 대체적으로 비효율적인 알고리즘 구조나 불필요한 반복 때문에 발생할 수 있습니다. 해당 코드에서 매 상태에서 방문 여부를 확인하는 visit 배열을 사용하는 것은 좋으나, 각 위치(i,j)에서 BFS를 시작할 때마다 visit 배열을 새로 생성하고 초기화하는 작업을 반복하고 있습니다. 이는 비효율적인 메모리 사용과 시간 소모를 가져올 수 있습니다.
또한, 모든 위치에서 BFS를 시작하는 대신, 문제의 요구사항에 따라 특정 조건(예: 특정 값이 있는 위치)에서만 BFS를 시작하는 등의 최적화를 고려해볼 필요가 있습니다. 문제의 조건이나 목적을 더 자세히 고려하여, 불필요한 탐색을 줄이거나, 탐색 과정에서의 조건을 더 효율적으로 처리할 방법을 찾아보는 것이 좋겠습니다.
시간 초과 문제 해결을 위한 구체적인 제안:
- visit 배열의 초기화를 BFS 시작 전 한 번만 수행합니다.
- 모든 점에서 BFS를 시작하는 대신, 문제의 조건에 맞는 시작점을 선정하여 탐색의 범위를 줄여볼 수 있습니다.
- 큐에 삽입하는 조건이나 방문 체크를 더 효율적으로 관리하여 불필요한 반복을 최소화합니다.
다시 한 번 코드를 점검해보시고, 알고리즘의 효율성을 개선해볼 방법을 고민해보시길 바랍니다. 추가적인 질문이 있으시면 도움을 드리기 위해 여기 있겠습니다.
바둑돌에 조합을 구하는 dfs는 설명이 어딨나요
0
96
1
알고리즘이라.. 강의 설명때 모식도가 있으면 더좋겠어요
0
160
1
BFS 코드 중에 이해가 안되는 부분이 있습니다.
0
219
1
호텔 연결 질문드립니다.
0
157
1
최대 선호 음식 질문드립니다.
0
217
1
숨겨진 합 질문드립니다.
0
150
1
제품이동 질문드립니다.
0
126
1
송아지 찾기2 질문드립니다.
0
125
1
정사각형 그리기 질문드립니다.
0
142
1
호텔연결
0
143
1
중복된 문자 제거 코드
0
215
1
전투게임
0
168
1
멀티태스킹 질문드립니다.
0
194
1
숨겨진 합 자바 질문드립니다.
0
135
1
영화관람 시간초과 질문드립니다.
0
192
1
[2-5] 최대선호음식 시간초과..
0
263
1
dp 풀이는 어려운가요?
0
399
2
문제 의문
0
296
2
모의고사 7회 2번 송아지 찾기 테스트케이스 3번, 4번 오류
0
313
1
안녕하세요. 궁금한점이 있어서 질문드립니다.
0
244
1
BFS 참고하세요
0
265
1
#include<bits/stdc++.h>
0
761
1
잔디 문제 해설 c로 바꿔서 출력할 때
1
374
1
조합을 구할때 algorithm 함수 next_permutation 사용 가능 여부
0
459
1

