문제 소개
A, B, C 를 똑같이 만들어 주는 연산이다.
문제 풀이
bfs로 풀었다. 어쨋든 똑같은 수로 만들면 되니까... 그리고 var visited = [String: Bool]() 로 visited 를 선언해줬다.
import Foundation
let abc = readLine()!.split(separator: " ").map { Int($0)! }
let (a, b, c) = (abc[0], abc[1], abc[2])
func calc(_ num1: Int, _ num2: Int) -> (Int, Int) {
if num1 < num2 {
return (num1 + num1, num2 - num1)
} else {
return (num1 - num2, num2 + num2)
}
}
var queue = [(a, b, c)]
var visited = [String: Bool]()
var idx = 0
while queue.count > idx {
let poped = queue[idx]
let (a, b, c) = (poped.0, poped.1, poped.2)
idx += 1
if a == b && b == c {
print(1)
exit(0)
}
let ab = calc(a, b)
let ac = calc(a, c)
let bc = calc(b, c)
if visited["\(ab.0) \(ab.1) \(c)"] == nil {
visited["\(ab.0) \(ab.1) \(c)"] = true
queue.append((ab.0, ab.1, c))
}
if visited["\(ac.0) \(b) \(ac.1)"] == nil {
visited["\(ac.0) \(b) \(ac.1)"] = true
queue.append((ac.0, b, ac.1))
}
if visited["\(a) \(bc.0) \(bc.1)"] == nil {
visited["\(a) \(bc.0) \(bc.1)"] = true
queue.append((a, bc.0, bc.1))
}
}
print(0)
'→ Problems' 카테고리의 다른 글
[Algorithm] 백준 - 16946번 벽 부수고 이동하기 4 (Swift) (0) | 2024.06.12 |
---|---|
[Algorithm] 백준 - 2206번 벽 부수고 이동하기 (Swift) (0) | 2024.06.11 |
[Algorithm] 백준 - 14502번 연구소 (Swift) (1) | 2024.06.09 |
[Algorithm] 백준 - 9019번 DSLR (Swift) (시간초과) (1) | 2024.06.08 |
[Algorithm] 백준 - 16928번 뱀과 사다리 게임 (Swift) (0) | 2024.06.07 |