1 분 소요

문제링크: 프로그래머스 Lv.2 방문 길이


1. 아이디어

map을 돌아다니며 이동길이를 체크해야 함.

*처음에는 점에 대한 방문여부 등을 체크하려고 했으나, 이미 방문은 했던 위치이지만 새로운 곳에서 왔을 경우 정답카운트를 처리하기가 곤란했음.

*그래서 대안으로 map을 2배 사이즈로 키워서 실제 선에 대한 방문여부를 true, false로 체크하기로 생각함.

2. 자료구조

  • map 2배 크기의 방문체크 배열이 필요. boolean[ ][ ] visited
  • 방향을 특정할 배열이 필요 : int[ ][ ] dir
  • 문자를 loop를 돌며 이동시킬 때 편리하게 비교하기 위한 캐릭터형태의 배열 필요 : char[ ] cArr
  • 현재 위치를 나타내는 배열 필요 : int[ ] here

3. 구현

public static int solution(String dirs) {
    int answer = 0;

    int[][] dir = { {0, 2}, {0, -2}, {-2, 0}, {2, 0} };
    boolean[][] visited = new boolean[22][22];
    char[] cArr = dirs.toCharArray();

    int[] here = {10, 10};

    for (int i = 0; i < cArr.length; i++) {
        char cur = cArr[i];
        int[] move = new int[2];
        if(cur == 'U') {
            move = dir[0];
        } else if(cur == 'D') {
            move = dir[1];
        } else if(cur == 'L') {
            move = dir[2];
        } else {
            move = dir[3];
        }

        int x = here[0] + move[0];
        int y = here[1] + move[1];

        int lineX = here[0] + (move[0] / 2);
        int lineY = here[1] + (move[1] / 2);

        if(x >= 0 && x < 22 && y >= 0 && y < 22) {
            if(!visited[lineX][lineY]) {
                visited[lineX][lineY] = true;
                answer++;
            }
            here[0] = x;
            here[1] = y;
        }
    }
    return answer;
}

4. 학습내용

  • 이동길이를 알기 위해서는 이동한 선에 true false를 두는게 편할 수 있음!

마지막 수정일시: 2022-10-13 14:19

댓글남기기