코딩테스트 - 프로그래머스/JAVA

[프로그래머스 / Summer/Winter Coding(~2018) / 자바(JAVA)] 방문 길이

읁; 2024. 5. 28. 15:36

[프로그래머스 / Summer/Winter Coding(~2018) / 자바(JAVA)] 방문 길이

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/49994

[ 요약 ]

더보기

시작 시간 : 의미X

종료 시간 : 의미X

소요 시간(분) : 한 시간 이상

 

도전 횟수 (제출 횟수) : 2

로직 및 풀이 참고 여부 : X

 

[ 풀어보기 ]

 

 

정답 풀이

📌 로직

  1. HashSet 을 이용해서, 방문한 길을 set에 add하는 방식.
    • x 좌표와 y좌표를 나타내는 int x, int y에 초기값 0을 각각 설정
    • 0,0에서 0,1로 이동했다 => set에 0001과 0100을 둘 다 추가함
      • (0,0) -> (0,1)과 (0,1) -> (0,0) 이 같은 길로 처리되기 때문
    • set은 중복을 허용하지 않기 때문에 방문했던 길이 add되면 중복되어 추가되지 않음을 이용.
  2. 마지막에 set의 size / 2를 하면, 방문한 길이가 구해질 것.

 

📌 코드

import java.util.*;

class Solution {
    public int solution(String dirs) {
        int answer = 0;
        Set<String> set = new HashSet<>();
        
        int x = 0;
        int y = 0;
         
        for(char ch : dirs.toCharArray()) {
            String prev = x + "" + y;
            
            switch(ch) {
                case 'U' :
                    if(y+1 > 5) continue;
                    y++;
                    break;
                case 'D' :
                    if(y-1 < -5) continue;
                    y--;
                    break;
                case 'R' :
                    if(x+1 > 5) continue;
                    x++;
                    break;
                case 'L' :
                    if(x-1 < -5) continue;
                    x--;
                    break;
            }
                        
            String cur = x + "" + y;

            set.add(prev+cur);
            set.add(cur+prev);
        }

        return set.size()/2;
    }
}

 

📌 채점 결과

정확성  테스트
테스트 1 〉	통과 (10.58ms, 74.4MB)
테스트 2 〉	통과 (10.05ms, 78.2MB)
테스트 3 〉	통과 (9.28ms, 73.7MB)
테스트 4 〉	통과 (10.82ms, 75.9MB)
테스트 5 〉	통과 (8.56ms, 82.7MB)
테스트 6 〉	통과 (11.33ms, 81MB)
테스트 7 〉	통과 (10.63ms, 87MB)
테스트 8 〉	통과 (10.18ms, 77.3MB)
테스트 9 〉	통과 (7.92ms, 77MB)
테스트 10 〉	통과 (7.73ms, 73.4MB)
테스트 11 〉	통과 (8.44ms, 78.4MB)
테스트 12 〉	통과 (8.43ms, 80.2MB)
테스트 13 〉	통과 (8.36ms, 75.1MB)
테스트 14 〉	통과 (11.81ms, 80.4MB)
테스트 15 〉	통과 (10.36ms, 73.5MB)
테스트 16 〉	통과 (13.46ms, 82.7MB)
테스트 17 〉	통과 (10.09ms, 77.8MB)
테스트 18 〉	통과 (13.18ms, 82.4MB)
테스트 19 〉	통과 (10.46ms, 81MB)
테스트 20 〉	통과 (13.01ms, 85.2MB)

채점 결과
정확성: 100.0
합계: 100.0 / 100.0