문제

title: "코딩테스트 연습 - 방문 길이"
image: "https://image.freepik.com/free-vector/landing-page-template-for-a-website_23-2147782747.jpg"
description: "게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다."
url: "https://school.programmers.co.kr/learn/courses/30/lessons/49994"

문제 풀이

문제 접근

HashSet에 이미 지나간 경로 저장 (양쪽으로)

간단한 수도 코드 정리



풀이 코드

import java.util.HashSet;
import java.util.Set;

class Solution {
    public int solution(String dirs) {
        int answer = 0;
        int x = 0, y = 0;

        Set<String> visitedPaths = new HashSet<>();
        
        for (char dir : dirs.toCharArray()) {
            int nextX = x;
            int nextY = y;

            switch (dir) {
                case 'U':
                    nextY++;
                    break;
                case 'D':
                    nextY--;
                    break;
                case 'R':
                    nextX++;
                    break;
                case 'L':
                    nextX--;
                    break;
            }

            if (nextX < -5 || nextX > 5 || nextY < -5 || nextY > 5) {
                // 경계를 벗어나는 경우 무시
                continue;
            }

            // 경로 저장
            String path1 = x + "" + y + "" + nextX + "" + nextY;
            String path2 = nextX + "" + nextY + "" + x + "" + y;
            
            // 처음 방문한 길이라면 기록
            if (!visitedPaths.contains(path1) && !visitedPaths.contains(path2)) {
                visitedPaths.add(path1);
                visitedPaths.add(path2);
                answer++;
            }

            // 좌표 업데이트
            x = nextX;
            y = nextY;
        }
        
        return answer;
    }
}