알고리즘/알고리즘 문제풀이
수학_백준_2436
Downey
2021. 11. 18. 20:39
https://www.acmicpc.net/submit/2436/35551075
접근 방법
1. divided = LCM / GCD 한다. 이 값은 LCM에서 GCD를 제외한 것.
2. divided를 sqrt하여 Array(1...sqrt). 이는 약수쌍을 구하기 쉽게 하기 위한 것.
3. 약수쌍 ( Ex. divided == 38의 경우, Int(sqrt)할 경우 6, 1...6중 [1,2] 이를 각각 divided에 나누면 [[1,38],[2,19]]
4. 모든 element에 GCD를 곱하고 합이 min인 것을 return
실패 코드
더보기
import Foundation
let line = readLine()!.components(separatedBy: " ")
let GCD = Int(line[0])!
let LCM = Int(line[1])!
let divided = LCM / GCD
let sqrted = Int(sqrt(Double(divided)))
var twoNumsArray = [[Int]]()
var divisor = Array<Int>(1...sqrted)
divisor = divisor.filter({ sqrted % $0 == 0 })
for n in divisor {
let temp = [n, divided / n]
twoNumsArray.append(temp)
}
var sumArray = [Int]()
for n in twoNumsArray {
var temp = 0
for i in n {
temp += i
}
sumArray.append(temp)
}
let index = sumArray.firstIndex(of: sumArray.min()!)!
let sol = twoNumsArray[index].map({
$0 * GCD
})
print("\(sol[0]) \(sol[1])")
오답 이유 : 약수 쌍을 잘못 찾았다. sqrt를 쓰면 옳은 약수 쌍을 찾을 수 없다.