방향 String을 Queue에 담아 하나씩 poll하여 출발지와 목적지를 roads(방문길)에 담아서 길들을 지날 떄마다 방문횟수를 +1해주어 구현하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class 방문길이 {
static int answer = 0;
static List<String> roads = new ArrayList<>();//지나간 길들을 담는 리스트
public static void main(String[] args) {
String dirs = "LULLLLLLU";
solution(dirs);
}
static int solution(String dirs) {
int[] position = new int[2];//목적지를 담을 배열
Queue<Character> dir = new LinkedList<Character>();//방향을 char로 쪼개서 담을 큐
for(int i=0; i<dirs.length(); i++) {//쪼개서 담음
dir.add(dirs.charAt(i));
}
position[0]=5;//처음시작지점
position[1]=5;//처음시작지점
for(int i=0; i<dirs.length(); i++) {
int a = 0;
String road = "";
road = String.valueOf(position[0])+String.valueOf(position[1]);//출발지저마을 담아둔다
char move = dir.poll();//큐에서 방향을 가져온다.
if(move=='U') {//UP일시
a = position[0]-1;
if(!check(a)) {
continue;
}
position[0]=a;
}
else if(move=='D') {//DOWN일시
a = position[0]+1;
if(!check(a)) {
continue;
}
position[0]=a;
}
else if(move=='L') {//LEFT일시
a = position[1]-1;
if(!check(a)) {
continue;
}
position[1]=a;
}
else if(move=='R') {//RIGHT일시
a = position[1]+1;
if(!check(a)) {
continue;
}
position[1]=a;
}
String destination = String.valueOf(position[0])+String.valueOf(position[1]);//목적지세팅
if(roadCheck(road, destination)){//해당길을 지나간 경우가 없을시 answer++, roads에 방문한 길 add
answer++;
roads.add(road+destination);
}
}
return answer;
}
/*
* 범위를 넘어가는 경우 체크
* */
static boolean check(int num) {
boolean Yn = true;
if(num<0||num>10) {
Yn = false;
}
return Yn;
}
/*
* 이미 지나간 길인지 체크
* */
static boolean roadCheck(String road, String destination) {
boolean Yn = true;
if(roads.contains(road+destination)||roads.contains(destination+road)) {
Yn = false;
}
return Yn;
}
}