[JAVA 문제 풀이] 322. 공원 산책

프로그래머스 (172928)
Stupefyee's avatar
Jun 17, 2025
[JAVA 문제 풀이] 322. 공원 산책
notion image
notion image
 

내가 작성한 코드

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

stupefyee