-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path12851번.swift
56 lines (49 loc) · 1.33 KB
/
12851번.swift
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
// 출처 : 백준 숨바꼭질 2
// https://www.acmicpc.net/problem/12851
// 풀이 : hogumachu
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
var queue: [Int] = []
var queueIndex = 0
var result = 0
var resultLevel = -1
var values: [Int] = Array(repeating: 100000, count: input[0] > input[1] ? 2 * input[0] + 1 : 2 * input[1] + 1)
queue.append(input[0])
values[input[0]] = 0
while queue.count > queueIndex {
let select = queue[queueIndex]
if select == input[1] {
if resultLevel == -1 {
resultLevel = values[select]
result += 1
} else if values[select] == resultLevel {
result += 1
} else {
break
}
} else {
visit(select)
}
queueIndex += 1
}
func visit(_ num: Int) -> Void {
if num + 1 < values.count {
if values[num + 1] >= values[num] + 1 {
values[num + 1] = values[num] + 1
queue.append(num + 1)
}
}
if num - 1 >= 0 {
if values[num - 1] >= values[num] + 1 {
values[num - 1] = values[num] + 1
queue.append(num - 1)
}
}
if num * 2 < values.count {
if values[num * 2] >= values[num] + 1 {
values[num * 2] = values[num] + 1
queue.append(num * 2)
}
}
}
print(resultLevel)
print(result)