import java.util.*;
import java.awt.*;
class Solution {
public String solution(int n, int m, int x, int y, int r, int c, int k) {
int dx[]={1,-1,0,0};
int dy[]={0,0,-1,1}; // 상 하 좌 우
char d[] = {'d','u','l','r'};
String visited[][] = new String[n+1][m+1];
Queue<Point> queue = new LinkedList<>();
queue.add(new Point(x,y));
visited[x][y]="";
String min = "";
boolean flag = false;
while(!queue.isEmpty()){
Point now = queue.poll();
String nowS = visited[now.x][now.y];
if(now.x==r&&now.y==c&&nowS.length()==k){
flag=true;
if(min.equals("")) min = nowS;
else if(min.compareTo(nowS)>0) min = nowS;
}
if(nowS.length()<k){
for(int i=0; i<4; i++){
int newX = now.x+dx[i];
int newY = now.y+dy[i];
String newS = nowS+d[i];
if(1<=newX&&newX<=n && 1<=newY&&newY<=m){
String isVisit = visited[newX][newY];
if(isVisit==null||isVisit.length()!=newS.length()||
(isVisit.length()==newS.length()&&isVisit.compareTo(newS)>0)){
queue.add(new Point(newX,newY));
visited[newX][newY]=newS;
}
}
}
}
}
return flag ? min : "impossible";
}
}
시간 초과를 해결해서 맞추긴 했는데 테스트 시간이 너무 오래걸렸다... 통과 못할줄 알고 조마조마;;
더 최적화할 수 있는 방법이 없나 찾아봤다.
import java.util.*;
class Solution {
public String solution(int n, int m, int x, int y, int r, int c, int k) {
// 출발점과 도착점의 맨해튼 거리 계산
int distance = Math.abs(r - x) + Math.abs(c - y);
// 도달 불가능한 경우 (거리와 k의 차이가 홀수이거나, k가 거리보다 작은 경우)
if (distance > k || (k - distance) % 2 != 0) {
return "impossible";
}
// 가능한 방향과 대응하는 문자 배열
int[] dx = {1, 0, 0, -1}; // 하, 좌, 우, 상 (사전순)
int[] dy = {0, -1, 1, 0};
char[] dir = {'d', 'l', 'r', 'u'};
StringBuilder path = new StringBuilder();
int remainingMoves = k;
// 탐색을 시작하여 경로를 구성
while (remainingMoves > 0) {
for (int i = 0; i < 4; i++) {
int newX = x + dx[i];
int newY = y + dy[i];
// 경계를 벗어나지 않으면 이동 시도
if (newX >= 1 && newX <= n && newY >= 1 && newY <= m) {
// 이동 후 남은 거리 계산
int newDistance = Math.abs(r - newX) + Math.abs(c - newY);
if (newDistance <= remainingMoves - 1) { // 남은 이동 횟수 내에 도달 가능
path.append(dir[i]);
x = newX;
y = newY;
remainingMoves--;
break;
}
}
}
}
return path.toString();
}
}
이 방법으로 사용했더니 훨씬 빨라졌습니다..