문제
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;
}
}