[프로그래머스] 공원 산책 (Java)
class Solution {
public int[] solution(String[] park, String[] routes) {
int x = -1;
int y = -1;
char[][] map = new char[park.length][park[0].length()];
for(int i = 0; i < park.length; i++){
map[i] = park[i].toCharArray();
if(park[i].contains("S")){
y = i;
x = park[i].indexOf("S");
}
}
for(String route : routes){
String way = route.split(" ")[0];
int len = Integer.parseInt(route.split(" ")[1]);
int nx = x;
int ny = y;
for(int i = 0; i < len; i++){
if(way.equals("E")){
nx++;
}
if(way.equals("W")){
nx--;
}
if(way.equals("S")){
ny++;
}
if(way.equals("N")){
ny--;
}
if(nx >=0 && ny >=0 && ny < map.length && nx < map[0].length){
if(map[ny][nx] == 'X'){
break;
}
if(i == len-1){
x = nx;
y = ny;
}
}
}
}
int[] answer = {y, x};
return answer;
}
}
접근방법
먼저 char형 2차원 배열을 만들어 공원 지도를 만든다.
map[i] = park[i].toCharArray();를 활용하여 문자열을 char형 배열로 변환하여 저장한다. 문자열에 S가 포함되어 있다면 시작지점이기 때문에, y 에는 i 의 값을 x 에는 park[i].indexOf(“S”) 를 저장한다.
명령을 수행한다. 명령이 담긴 문자열배열은 [“E 2”,”S 2”, “W 1”] 와 같이 들어있기 때문에 routes를 순회하며 문자 하나하나를 way 변수(방향)와 len(길이)변수에 나눠 저장한다.
길이만큼 반복문을 돌며 if문을 수행한다. E일 경우 동쪽 nx++; W일 경우 서쪽 nx–; S일 경우 남쪽 ny++; N일 경우 북쪽 ny–;
if(nx >=0 && ny >=0 && ny < map.length && nx < map[0].length)
해당 조건문으로 map밖이 아닌경우 X를 만나면 반복문을 종료하고, i가 길이-1일경우(반복문을 다 돌았을 경우에는) 마지막 좌표값을 저장해서 반환하도록 하였다.