예전에 풀었던 폭탄? 문제랑 비슷하다. 문자열 + 배열 문제
class Solution {
public int[] solution(String[] park, String[] routes) {
String[][] map = new String[park.length][park[0].length()];
// S의 x,y좌표 얻기
int x = 0, y = 0;
for(int i = 0; i < park.length; i++) {
map[i] = park[i].split("");
if((park[i].indexOf('S')) > -1){
x = park[i].indexOf('S');
y = i;
}
}
// 강아지의 위치
int[] answer = {y,x};
// 방향 구분
for(String location : routes) {
int value = ((int)location.charAt(location.length()-1)) - '0';
if(location.contains("E"))
moving(map,answer,1,value);
else if(location.contains("W"))
moving(map,answer,2,value);
else if(location.contains("S"))
moving(map,answer,3,value);
else if(location.contains("N"))
moving(map,answer,4,value);
}
return answer;
}
// 동쪽: 1, 서쪽 : 2 남쪽: 3 북쪽: 4 가정
public void moving(String[][] park, int[] dog, int xy, int value) {
int xi = dog[1];
int yi = dog[0];
if(xy == 1) {
for(int i = 0; i < value; i++) {
xi++;
if(park[0].length <= xi ||park[yi][xi].equals("X"))
return;
}
dog[1] = xi;
System.out.println(dog[1]);
}else if(xy == 2) {
for(int i = 0; i < value; i++) {
xi--;
if(0 > xi ||park[yi][xi].equals("X"))
return;
}
dog[1] = xi;
}else if(xy == 3) {
for(int i = 0; i < value; i++) {
yi++;
if(park.length <= yi ||park[yi][xi].equals("X"))
return;
}
dog[0] = yi;
}else {
for(int i = 0; i < value; i++) {
yi--;
if(0 > yi ||park[yi][xi].equals("X"))
return;
}
dog[0] = yi;
}
}
}
개인적으로 어려워서 시간을 많이썼다..
다른 사람 풀이중에 아예 x,y의 -1과 +1로 배열을 따로 만들어서 방향에 따라 이동 값을 여기에 곱해서 값을 더하는 방식이 있던데 정말 고수들이다..
park[yi][xi].equals("X") 여기서 park[xi].equals("x)만 써서 틀렸었다. 무슨생각으로 저렇게 한건지 모르겠다. 당연히 정확한 좌표값을 줘야하는데 실수다..
2. 항상 느끼는 거지만 간단한 방법을 생각해보자. 음수는 -1을 곱하면 된다는 것을 기억하자.