728x90
이해하기
처음엔 구현만 하면 되겠다고 생각했는데, 은근 헷갈렸다.
첫번째 풀이를 하고 제출했는데 줄줄이 실패가 떴다... 이유는 'X'를 마주쳤을 때의 구현을 빼먹어서...!
두번째 풀이는 x, y 방향을 반대로 설정해서 실패했다.
전부 수정해서 제출했더니 겨우 성공...ㅎ
x, y를 아래와 같이 고정해놓고 풀었더니 해결됐다.
문제풀이
// 첫번째 풀이 -> 실패 (X 구현을 안 함)
// 두번째 풀이 -> x, y 방향 반대로
class Solution {
public int[] solution(String[] park, String[] routes) {
int x = 0;
int y = 0;
char[][] arr = new char[park.length][park[0].length()];
for (int i = 0; i < park.length; i++) {
arr[i] = park[i].toCharArray();
if (park[i].contains("S")) {
x = i;
y = park[i].indexOf("S");
}
}
for (String route : routes) {
String direction = route.split(" ")[0];
int distance = Integer.valueOf(route.split(" ")[1]);
int nx = x;
int ny = y;
for (int i = 0; i < distance; i++) {
if (direction.equals("E")) {
ny++;
} else if (direction.equals("W")) {
ny--;
} else if (direction.equals("S")) {
nx++;
} else {
nx--;
}
if (nx >= 0 && ny >= 0 && nx < arr.length && ny < arr[0].length) {
if (arr[nx][ny] == 'X') {
break;
}
if (i == distance - 1) {
x = nx;
y = ny;
}
}
}
}
return new int[]{x, y};
}
}
int x = 0;
int y = 0;
char[][] arr = new char[park.length][park[0].length()];
for (int i = 0; i < park.length; i++) {
arr[i] = park[i].toCharArray();
if (park[i].contains("S")) {
x = i;
y = park[i].indexOf("S");
}
}
좌표를 저장할 x, y를 만들어두고 park를 char[][]로 변환한다.
for문을 돌다가 "S"가 있다면 x, y를 "S"의 좌표로 설정한다.
for (String route : routes) {
String direction = route.split(" ")[0];
int distance = Integer.valueOf(route.split(" ")[1]);
int nx = x;
int ny = y;
route를 하나하나 돈다.
split해서 첫번째를 direction, 두번째를 distance로 잡는다.
만약 'X'를 마주치게 되면 아예 가지 않은 것으로 해야하기 때문에 x, y 값을 건드리지 않기 위해 nx, ny를 만들었다.
for (int i = 0; i < distance; i++) {
if (direction.equals("E")) {
ny++;
} else if (direction.equals("W")) {
ny--;
} else if (direction.equals("S")) {
nx++;
} else {
nx--;
}
"E"면 동쪽으로 이동해야 하는 것이니 위의 그림에 따르면 y좌표를 ++해주어야 하고, "S"는 반대로 --해주면 된다.
"S"는 x좌표를 ++해주어야 하고, 나머지인 "N"은 --해주면 된다.
if (nx >= 0 && ny >= 0 && nx < arr.length && ny < arr[0].length) {
if (arr[nx][ny] == 'X') {
break;
}
if (i == distance - 1) {
x = nx;
y = ny;
}
}
범위를 확인하고, 만약 'X'를 마주친다면 무시할 것이니 break한다.
i가 distance - 1만큼 이동했다면 x, y에 nx, ny 값을 저장한다.
'JAVA > Coding Test Study' 카테고리의 다른 글
[Lv.2] 프로그래머스 - JadenCase 문자열 만들기 : Java (0) | 2024.05.20 |
---|---|
[Lv.1] 프로그래머스 - 달리기 경주 : Java (0) | 2024.05.15 |
[Lv.1] 프로그래머스 - 신고 결과 받기 : Java (0) | 2024.05.15 |
[Lv.1] 프로그래머스 - 개인정보 수집 유효기간 : Java (0) | 2024.05.13 |
[Lv.0] 프로그래머스 - 진료순서 정하기 : Java (0) | 2024.05.10 |