문제 설명
해결과정
Solution.java
class Solution {
public int[] solution(String[] park, String[] routes) {
int[] answer = startPosition(park);
int height = park.length - 1;
int width = park[0].length() - 1;
System.out.println("시작 좌표 (" + answer[0] + "," + answer[1] + ")");
System.out.println("공원의 한계 좌표 (" + height + "," + width + ")");
arrstr(park);
for(String route : routes) {
String optical = route.substring(0,1);
int length = Integer.parseInt(route.substring(2, route.length()));
move(park, answer, optical, length, height, width);
}
return answer;
}
// 명령대로 이동
public int[] move(String[] park, int[] answer, String optical, int length, int height, int width) {
// 현재 세로 좌표
int h = answer[0];
// 현재 가로 좌표
int w = answer[1];
// 명령어 대로 이동
String route = "";
switch(optical) {
case "E" :
w += length;
break;
case "W" :
w -= length;
break;
case "N" :
h -= length;
break;
case "S" :
h += length;
break;
}
// 공원을 벗어나지 않는다면
if(h <= height && w <= width && 0 <= h && 0 <= w) {
// 가는길에 X좌표 있는지 확인
int maxh = answer[0] > h ? answer[0] : h;
int minh = answer[0] < h ? answer[0] : h;
int maxw = answer[1] > w ? answer[1] : w;
int minw = answer[1] < w ? answer[1] : w;
for(int i = minh; i <= maxh; i++) {
for(int j = minw; j <= maxw; j++) {
route += park[i].charAt(j) + "";
}
}
if(!route.contains("X")){
answer[0] = h;
answer[1] = w;
}
}
return answer;
}
// 초반 포지션 입력
public int[] startPosition(String[] park) {
int[] answer = new int [2];
for(int i = 0; i < park.length; i++) {
if(park[i].contains("S")) {
int index = park[i].indexOf("S");
answer[0] = i;
answer[1] = index;
}
}
return answer;
}
// park 배열 출력
public void arrstr(String[] park) {
for(int i = 0; i < park.length; i++) {
for(int j = 0; j < park[i].length(); j++) {
System.out.print(park[i].charAt(j) + " ");
}
System.out.println();
}
}
}
Java
복사