문제 출처
https://www.acmicpc.net/problem/1525
접근 방식 및 풀이
- BruteForce와 BFS 활용 문제
- 자세한 것은 아래 주석 참고
- 참고블로그
소스 코드
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
|
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
private static int[] dx = {1, -1, 0, 0};
private static int[] dy = {0, 0, 1, -1};
private static Queue<Integer> queue;
private static final int MAX = 10001;
private static HashMap<Integer,Integer> map;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int start = 0;
// 입력값을 한줄의 string으로 만든다.
for (int i = 0; i <3 ; i++) {
for (int j = 0; j <3 ; j++) {
int tmp = sc.nextInt();
if(tmp ==0){
tmp=9;
}
start = start *10 +tmp;// 자리수를 한칸씩 이동하기 위해 10의배수로 처리리 }
}
}
queue = new LinkedList<>();
map = new HashMap<Integer, Integer>();
queue.add(start);
map.put(start, 0);
// 처음 시작 점을 큐에 넣고 이동 시킴.
// 193/425/786
// 예를 들어 5를 찾아갈때 i*3+j 식을 활용하여 i가 1이고, j가 2라면 5를 찾아 갈수 있다.
while (!queue.isEmpty()){
// 9가 나오는 위치를 찾아서 위치를 찾고 해당 위치를 기준으로 x,y의 위치를 찾는다.
// x,y의 위치를 찾은 뒤에 그 인데스로 9의 값을 이동시킨다.
// 이동시키면서 9가 우측 하단으로 갈 수 있도록 계속해서 swap해준다.
String now = String.valueOf(nowNum);
int nine = now.indexOf('9');// 9의 위치를 찾아서 움직일 것
int x = nine/3;
int y = nine%3;
for (int k = 0; k <4 ; k++) {
int nx = x + dx[k];
int ny = y + dy[k];
if((nx >= 0 && nx<3) && (ny >= 0 && ny<3)){
// 상하좌우의 범위안에서 찾는다. 서로의 값 바꿔주는 부분
StringBuilder next = new StringBuilder(now);
char temp = next.charAt(x*3 +y);
next.setCharAt(x*3 +y, (char) next.charAt(nx*3 +ny));
next.setCharAt(nx*3 +ny, temp);
int num = Integer.parseInt(next.toString());
if(!map.containsKey(num)){
//현재 가지고 있는 count에서 +1
queue.add(num);
}
}
}
}
if(map.containsKey(123456789)){
}else{
System.out.println("-1");
}
}
}
|
결과
'Competition > Baekjoon' 카테고리의 다른 글
[백준] 1644번 자바 소수의 연속합 (0) | 2020.04.19 |
---|---|
[백준] 1107번 자바 리모컨 (0) | 2020.04.17 |
[백준] 1476번 자바 날짜계산 (0) | 2020.04.16 |