

내가 작성한 코드
class Solution {
public int[] solution(String[] park, String[] routes) {
int[] answer = findStart(park);
outer: for (String route : routes) {
String[] move = route.split(" ");
int distance = Integer.parseInt(move[1]); // 이동 거리
String direction = move[0]; // 이동 방향
switch (direction) {
case "E":
int newColE = answer[1] + distance;
// 범위 확인
if (newColE > park[0].length() - 1) {
continue;
}
// 장애물 확인
for (int i = answer[1]; i <= newColE; i++) {
if (park[answer[0]].charAt(i) == 'X') {
continue outer; // 장애물이 있는 경우 이동하지 않음
}
}
// 이동
answer[1] = newColE;
break;
case "W":
int newColW = answer[1] - distance;
if (newColW < 0) {
continue;
}
for (int i = newColW; i <= answer[1]; i++) {
if (park[answer[0]].charAt(i) == 'X') {
continue outer;
}
}
answer[1] = newColW;
break;
case "N":
int newRowN = answer[0] - distance;
if (newRowN < 0) {
continue;
}
for (int i = newRowN; i <= answer[0]; i++) {
if (park[i].charAt(answer[1]) == 'X') {
continue outer;
}
}
answer[0] = newRowN;
break;
case "S":
int newRowS = answer[0] + distance;
if (newRowS > park.length - 1) {
continue;
}
for (int i = answer[0]; i <= newRowS; i++) {
System.out.println(park[i].charAt(answer[1]));
if (park[i].charAt(answer[1]) == 'X') {
continue outer;
}
}
answer[0] = newRowS;
break;
}
}
return answer;
}
// 시작 위치 찾는 메서드
private int[] findStart(String[] park) {
for (int i = 0; i < park.length; i++) {
for (int j = 0; j < park[i].length(); j++) {
if (park[i].charAt(j) == 'S') {
return new int[] { i, j };
}
}
}
return new int[] { -1, -1 }; // 시작 위치를 찾지 못한 경우
}
}
다른 사람의 코드
class Solution {
public int[] solution(String[] park, String[] routes) {
int h = park.length; // 공원 높이
int w = park[0].length(); // 공원 너비
// 시작 위치 변수
int startH = 0;
int startW = 0;
// 시작 위치 찾기
for (int i = 0; i < h; i++) {
if (park[i].contains("S")) {
startH = i;
startW = park[i].indexOf("S");
}
}
// 이동 경로 처리
for (String route : routes) {
String d = route.split(" ")[0]; // 방향
int move = Integer.parseInt(route.split(" ")[1]); // 이동 거리
int moveH = startH;
int moveW = startW;
// 이동 거리만큼 반복
for (int i = 0; i < move; i++) {
// 방향에 따라 한칸 이동
switch (d) {
case "S":
moveH++;
break;
case "N":
moveH--;
break;
case "E":
moveW++;
break;
case "W":
moveW--;
break;
}
// 이동 후 범위 체크
if (moveH >= 0 && moveH < h && moveW >= 0 && moveW < w) {
// 이동 후 장애물 체크
if (park[moveH].substring(moveW, moveW + 1).equals("X")) {
break;
}
// 이동 거리까지 이동 가능한 경우 위치 업데이트
if (i == move - 1) {
startH = moveH;
startW = moveW;
}
}
}
}
int[] answer = { startH, startW };
return answer;
}
}
- 스위치 문과 반복문의 위치를 바꾼것 만으로도 코드를 최적화 시킬 수 있었음.
Share article