문제
문제 풀이
park 일차원 배열을 2차원 배열로 변경을 하고 start 위치를 cur로 입력하고 시작.
route 값에 있는 방향가 움직임 크기를 가지고 그 값이 배열의 크기를 초과하거나 x가 있는 값이 있는곳을 지날 때 다음 반복문을 시행하도록 하였음.
나의 답안
public static int[] solution(String[] park, String[] routes) {
int width = park[0].length();
int height = park.length;
int[] cur = {};
String[][] newPark = new String[height][width];
for (int i = 0; i < park.length; i++) {
for (int j = 0; j < park[i].length(); j++) {
if (park[i].charAt(j) == 'S') {
cur = new int[]{i, j};
newPark[i][j] = "S";
} else if (park[i].charAt(j) == 'O') {
newPark[i][j] = "O";
} else {
newPark[i][j] = "X";
}
}
}
for (String str : routes) {
String direction = str.split(" ")[0];
int move = Integer.parseInt(str.split(" ")[1]);
if (move >= width || move >= height) continue;
int moveResult;
dir:
switch (direction) {
case "N":
moveResult = cur[0] - move;
if (moveResult < 0) continue;
for (int i = 1; i <= move; i++) {
if ("X".equals(newPark[cur[0] - i][cur[1]])) break dir;
}
cur[0] = moveResult;
break;
case "S":
moveResult = cur[0] + move;
if (moveResult >= height) continue;
for (int i = 1; i <= move; i++) {
if ("X".equals(newPark[cur[0] + i][cur[1]])) break dir;
}
cur[0] = moveResult;
break;
case "W":
moveResult = cur[1] - move;
if (moveResult < 0) continue;
for (int i = 1; i <= move; i++) {
if ("X".equals(newPark[cur[0]][cur[1] - i])) break dir;
}
cur[1] = moveResult;
break;
case "E":
moveResult = cur[1] + move;
if (moveResult >= width) continue;
for (int i = 1; i <= move; i++) {
if ("X".equals(newPark[cur[0]][cur[1] + i])) break dir;
}
cur[1] = moveResult;
break;
}
}
return cur;
}
'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글
추억 점수 (0) | 2023.03.31 |
---|---|
바탕화면 정리 (0) | 2023.03.29 |
신고 결과 받기 (0) | 2023.03.29 |
개인정보 수집 유효기간 (0) | 2023.03.29 |
대충 만든 자판 (0) | 2023.03.28 |