자바/코딩테스트
[프로그래머스] 방문 길이 - Java(자바)
대전집주인
2024. 4. 1. 17:41
728x90
SMALL
문제 이해
- 좌표문제로 좌표 범위는 -5 ~ 5까지로 해당 범위를 나가면 안된다.
- 문자열은 상하좌우를 뜻하는 LRUD가 있다.
- 문제의 핵심은 좌표범위를 벗어나지 않고 처음가는 길인곳의 길이를 구하는것이다.
- A -> B == B -> A 두개의 길은 같은길로 처리한다.
- 리스트에 좌표를 움직이기 전 좌표 + 움직인 후 좌표, 움직인 후 좌표 + 움직이기 전 좌표 로 두가지 경우를 둘다 넣어 문자열로 담아놨다.
- indexOf를 사용하여 리스트에 존재 하지 않으면 처음 가는길로 간주했다.
import java.util.*;
class Solution {
public int solution(String dirs) {
List<String> visit = new ArrayList();
int answer = 0;
int[] point = new int[2];
point[0] = 0;
point[1] = 0;
for(int i = 0; i<dirs.length(); i++){
int x = point[0];
int y = point[1];
if(dirs.charAt(i) == 'L'){
x -= 1;
}else if(dirs.charAt(i) == 'R'){
x += 1;
}else if(dirs.charAt(i) == 'U'){
y += 1;
}else if(dirs.charAt(i) == 'D'){
y -= 1;
}
if(x >= -5 && x <= 5 && y >= -5 && y <= 5){
String tmp = Integer.toString(point[0]+5) + Integer.toString(point[1]+5)
+ Integer.toString(x+5) + Integer.toString(y+5);
String tmp1 = Integer.toString(x+5) + Integer.toString(y+5)
+ Integer.toString(point[0]+5) + Integer.toString(point[1]+5);
if(visit.indexOf(tmp) == -1){
visit.add(tmp);
visit.add(tmp1);
answer++;
}
point[0] = x;
point[1] = y;
}
}
return answer;
}
}
728x90
LIST