코딩테스트 - 프로그래머스/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
[ 풀어보기 ]
정답 풀이
📌 로직
- 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되면 중복되어 추가되지 않음을 이용.
- 마지막에 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