https://school.programmers.co.kr/learn/courses/30/lessons/172928
문제 접근
처음에 park를 2차원 배열로 바꿔서 풀었는데 런타임 에러가 뜨더라
다른 사람 풀이를 보니 나랑 같은 방법에 park를 그대로 사용하였더라
내가 2차원 배열로 바꾼게 문제 같아서 park를 그대로 사용해서 풀이하니 맞았다.
ㅡ 시작 위치를 파악하고 동서남북으로 가는 방향마다 공원 이탈과 이동 경로에 장애물이 있는지 다 만들어서 풀어주었다.
class Solution {
public int[] solution(String[] park, String[] routes) {
// 시작 위치
int[] answer = new int[2];
for(int i=0; i<park.length; i++) {
for(int j=0; j<park[i].length(); j++) {
if(park[i].charAt(j) == 'S') {
answer[0] = i;
answer[1] = j;
System.out.println(answer[0] + " / " + answer[1]);
}
}
}
for(int i=0; i<routes.length; i++) { // 출발
if(routes[i].charAt(0) == 'E') { // 동쪽
int move = Integer.valueOf(routes[i].charAt(2)-48);
System.out.println("이동 거리 : "+ move);
boolean flag = false;
if(answer[1] + move >= park[answer[0]].length()) continue; // 공원 이탈
for(int j=1; j<=move; j++) { // 장애물 검사
if(park[answer[0]].charAt(answer[1]+j) == 'X') {
flag = true;
break;
}
}
if(flag == true) continue;
answer[1] += move;
System.out.println("E : 현재 위치 "+ answer[0] + " / " + answer[1]);
}
else if(routes[i].charAt(0) == 'W') { // 서쪽
int move = Integer.valueOf(routes[i].charAt(2)-48);
System.out.println("이동 거리 : "+ move);
boolean flag = false;
if(answer[1] - move < 0) continue; // 공원 이탈
for(int j=1; j<=move; j++) { // 장애물 검사
if(park[answer[0]].charAt(answer[1]-j) == 'X') {
flag = true;
break;
}
}
if(flag == true) continue;
answer[1] -= move;
System.out.println("W : 현재 위치 "+ answer[0] + " / " + answer[1]);
}
else if(routes[i].charAt(0) == 'S') { // 남쪽
int move = Integer.valueOf(routes[i].charAt(2)-48);
System.out.println("이동 거리 : "+ move);
boolean flag = false;
if(answer[0] + move >= park.length) continue; // 공원 이탈
for(int j=1; j<=move; j++) { // 장애물 검사
if(park[answer[0]+j].charAt(answer[1]) == 'X') {
flag = true;
break;
}
}
if(flag == true) continue;
answer[0] += move;
System.out.println("S : 현재 위치 "+ answer[0] + " / " + answer[1]);
}
else if(routes[i].charAt(0) == 'N') { // 북쪽
int move = Integer.valueOf(routes[i].charAt(2)-48);
System.out.println("이동 거리 : "+ move);
boolean flag = false;
if(answer[0] - move < 0) continue; // 공원 이탈
for(int j=1; j<=move; j++) { // 장애물 검사
if(park[answer[0]-j].charAt(answer[1]) == 'X') {
flag = true;
break;
}
}
if(flag == true) continue;
answer[0] -= move;
System.out.println("N : 현재 위치 "+ answer[0] + " / " + answer[1]);
}
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 달리기 경주 / JAVA] (0) | 2023.04.11 |
---|---|
[프로그래머스 / 추억 점수 / JAVA] (0) | 2023.03.31 |
[프로그래머스 / 덧칠하기 / JAVA] (0) | 2023.03.24 |
[프로그래머스 / 폰켓몬 / JAVA / 해시] (0) | 2023.03.23 |
[프로그래머스 / 2016년 / JAVA] (0) | 2023.03.23 |
댓글