본문 바로가기

Algorithm/Algorithm Test

[프로그래머스] 방문 길이 (Java)

카테고리

배열

나만의 카테고리

로직 짜기

문제 링크

programmers.co.kr/learn/courses/30/lessons/49994

 

코딩테스트 연습 - 방문 길이

 

programmers.co.kr

요점

  • 배열 활용
  • 길은 양쪽에서 지나가는 경우를 모두 확인해야한다

참고 지식

  • String.length() - Java

풀이 (Java)

class Solution {
    public boolean[][][][] visitedPoint = new boolean[11][11][11][11];
    public int[] moveX = {-1, 1, 0, 0};
    public int[] moveY = {0, 0, 1, -1};
    
    public int solution(String dirs) {
        int answer = 0;
        
        int x = 5;
        int y = 5;
        int afterX = 5;
        int afterY = 5;
        int movingIndex = 0;
        
        for (int i = 0; i < dirs.length(); i++) {
            x = afterX;
            y = afterY;
            
            switch(dirs.charAt(i)) {
                case 'L' :
                    movingIndex = 0;
                    break;
                case 'R' :
                    movingIndex = 1;
                    break;
                case 'U' :
                    movingIndex = 2;
                    break;
                case 'D' :
                    movingIndex = 3;
                    break;
            }
            
            afterX += moveX[movingIndex];
            afterY += moveY[movingIndex];
            
            if (isNotValidPoint(afterX, afterY)) {
                afterX -= moveX[movingIndex];
                afterY -= moveY[movingIndex];
                continue;
            }
            
            if (!visitedPoint[x][y][afterX][afterY] && !visitedPoint[afterX][afterY][x][y]) {
                visitedPoint[x][y][afterX][afterY] = true;
                visitedPoint[afterX][afterY][x][y] = true;
                answer++;
            }
        }
        
        return answer;
    }
    
    public boolean isNotValidPoint(int x, int y) {
        return (x < 0 || x > 10 || y < 0 || y > 10);
    }
}

로직 자체는 문제를 보자마자 어떤 방식으로 풀어나가야 할지 그려지는 문제입니다. 하지만 이동할 때 고민이 되는 부분이 약간 있었습니다. 배열로 {-1, 1, 0, 0} (U, D, R, L) 저장해서 사용하는 방식을 선택했지만 다른 방식도 있을 것 같습니다.

 


알고리즘 초보가 정리한 글입니다

더 좋은 방법이나 코드에 대한 코멘트 언제나 환영합니다!

 

반응형