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를 쓰면 옳은 약수 쌍을 찾을 수 없다.