[프로그래머스] 방문 길이 JAVA

atdawn·2024년 7월 16일

Algorithm

목록 보기
5/7

문제

문제 해결

가로 세로로 배열을 나누어, 방문한적이 있는지 검사하는 방식으로 문제를 해결했다.

  1. 이동 경로 저장
  • 세로 방향의 이동을 sero 배열로, 가로 방향의 이동을 garo 배열로 관리하여 캐릭터가 처음 지나가는 길을 확인한다.
  • 좌표의 범위는 -5에서 5이므로 sero 배열의 크기는 10 x 11, garo 배열의 크기는 11 x 10 이다.
  1. 좌표 이동과 경계 확인
  • 시작 좌표는 (0, 0)으로 설정한다.
  • 각 명령어에 따라 캐릭터의 좌표를 업데이트하고, 이동 경로가 처음인지 확인한다.
  • 좌표가 경계를 벗어나는 경우 해당 명령어는 무시한다.
  1. 각 명령어에 따라 이동한 후 처음 지나가는 길이라면 answer를 증가 한다.

코드

import java.util.*;

class Solution {
    public int solution(String dirs) {
        int answer = 0;
        boolean[][] garo = new boolean[11][10]; // 가로 방향의 길을 저장
        boolean[][] sero = new boolean[10][11]; // 세로 방향의 길을 저장
        
        int x = 0; // 현재 x좌표
        int y = 0; // 현재 y좌표
        
        for (char c : dirs.toCharArray()) {
            if (c == 'U') {
                if (y >= 5) continue; // 경계를 벗어나면 무시
                y++;
                if (!sero[5 - y][x + 5]) { // 처음 가는 길이면
                    answer++;
                    sero[5 - y][x + 5] = true; // 길 방문 표시
                }
            } else if (c == 'D') {
                if (y <= -5) continue; // 경계를 벗어나면 무시
                if (!sero[5 - y][x + 5]) { // 처음 가는 길이면
                    answer++;
                    sero[5 - y][x + 5] = true; // 길 방문 표시
                }
                y--;
            } else if (c == 'R') {
                if (x >= 5) continue; // 경계를 벗어나면 무시
                if (!garo[5 - y][x + 5]) { // 처음 가는 길이면
                    answer++;
                    garo[5 - y][x + 5] = true; // 길 방문 표시
                }
                x++;
            } else { // 'L'
                if (x <= -5) continue; // 경계를 벗어나면 무시
                x--;
                if (!garo[5 - y][x + 5]) { // 처음 가는 길이면
                    answer++;
                    garo[5 - y][x + 5] = true; // 길 방문 표시
                }
            }
        }
      
        return answer;
    }
}
profile
복습 복습 복습

0개의 댓글