(Java) 프로그래머스 - 공원 산책

2023. 4. 26. 12:42·코딩 테스트

추가된 1단계 문제중 가장 정답률이 낮은 문제였다.

전형적인 그래프 탐색 문제였는데, 한칸씩 이동하며 조건을 검사해야 했지만

한번에 n칸씩 이동한다는걸 뒤늦게 깨닫고 수정하느라 풀이 시간이 많이 늘어났다.


최종 코드

import java.util.*;
class Solution {
    static int startX;
    static int startY;
    public int[] solution(String[] park, String[] routes) {
        int[] answer = new int[2];
     
        // 동서남북 이동할 좌표 map에 삽입
        Map<String, int[]> map = new HashMap<>();
        map.put("N", new int[]{-1, 0});
        map.put("E", new int[]{0, 1});
        map.put("S", new int[]{1, 0});
        map.put("W", new int[]{0, -1});
        
        startX = 0;
        startY = 0;
        
        // park 2차원 배열로 만들며 시작 위치 탐색
        String[][] arr = new String[park.length][park[0].length()];
        for(int i=0; i < park.length; i++) {
            String[] temp = park[i].split("");
            for(int j=0; j < temp.length; j++) {
                arr[i][j] = temp[j];
                if(temp[j].equals("S")) {
                    startX = i;
                    startY = j;
                }
            }       
        }
        
        // routes를 순회하며 move 메서드 호출
        for(int i = 0; i < routes.length; i++) {
            String[] temp = routes[i].split(" ");
            int[] movePoint = map.get(temp[0]);
            move(arr, startX, startY, movePoint, Integer.parseInt(temp[1]));
        }
        
        answer[0] = startX;
        answer[1] = startY;
        return answer;
    }
    // 재귀를 이용한 탐색 메서드
    public void move(String[][] arr, int x, int y, int[] movePoint, int cnt) {
    	// 경로가 모두 이동 가능한 길이었다면 startX, startY에 이동 좌표 추가
        if(cnt == 0) {
            startX = x;
            startY = y;
            return;
        }
        // 한칸씩 이동하며 경로 탐색
        int nextX = x + movePoint[0];
        int nextY = y + movePoint[1];
        // 2차원 배열을 벗어나지 않으면서 X가 아니면 재귀 호출
        if(nextX >= 0 && nextX < arr.length && nextY >= 0 && nextY < arr[0].length) {
            if(!arr[nextX][nextY].equals("X")) {
                    move(arr, nextX, nextY, movePoint, cnt - 1);
            }
        }
    }
}
저작자표시 (새창열림)

'코딩 테스트' 카테고리의 다른 글

(Java) 프로그래머스 - 뒤에 있는 큰 수 찾기  (0) 2023.05.04
(Java) 프로그래머스 - 연속 부분 수열 합의 개수  (0) 2023.04.28
(Java) 프로그래머스 - 개인정보 수집 유효기간  (0) 2023.04.25
(Java) 백준 15652 - N과 M (4)  (0) 2023.02.17
(Java) 프로그래머스 - 둘만의 암호  (0) 2023.02.16
'코딩 테스트' 카테고리의 다른 글
  • (Java) 프로그래머스 - 뒤에 있는 큰 수 찾기
  • (Java) 프로그래머스 - 연속 부분 수열 합의 개수
  • (Java) 프로그래머스 - 개인정보 수집 유효기간
  • (Java) 백준 15652 - N과 M (4)
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 - 공원 산책
상단으로

티스토리툴바