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

lhs's avatar
Nov 16, 2024
[프로그래머스] 방문 길이(49994)
 

1. 문제 풀이 아이디어

  • 이동 경로를 String으로 만들어 Set에 저장하고, 이동할 때마다 확인하면 문제를 해결할 수 있다.

2. 나의 정답 코드

class Solution { public int solution(String dirs) { int answer = 0; char[] chars = dirs.toCharArray(); int[] prev = {0, 0}; Set<String> set = new HashSet<>(); StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder2 = new StringBuilder(); for (char c : chars) { int[] cur = prev.clone(); switch (c) { case 'U': cur[1] += 1; break; case 'D': cur[1] -= 1; break; case 'L': cur[0] -= 1; break; case 'R': cur[0] += 1; break; } if (cur[0] < -5 || cur[0] > 5 || cur[1] < -5 || cur[1] > 5) { continue; } stringBuilder.append(prev[0]).append(prev[1]).append(cur[0]).append(cur[1]); stringBuilder2.append(cur[0]).append(cur[1]).append(prev[0]).append(prev[1]); if (!set.contains(stringBuilder.toString())) { set.add(stringBuilder.toString()); set.add(stringBuilder2.toString()); answer++; } stringBuilder.setLength(0); stringBuilder2.setLength(0); prev = cur; } return answer; } }

3. 정리

  • prev 배열에 {0, 0}을 저장하고, 이동할 때마다 이전 위치를 저장한다.
  • cur 배열에 이전 위치 값을 저장하고, switch문을 사용하여 입력 값에 따라 값을 변경한다.
  • StringBuilder를 2개 사용하여 이동 경로를 문자열로 만든다.
  • set에 중복된 이동 경로가 없다면 answer 값을 증가시키고, set에 이동 경로를 저장한다.
 
Share article

LHS's Study Space