[Swift] HackerRank - Between Two Set
こんにちは:
https://www.hackerrank.com/challenges/between-two-sets/problem
問題を理解するのに少し時間がかかりましたが...最初はどういう意味だったのか...
まずaの最小公倍数4を求め、次にbの最大公倍数16を求め、4と16の中間値のbを含む約数の個数を求める.
この例では、4、8、16の3つの答えが正しいので、3を返します.
(12は4の倍数ですが、16の約数ではないので正解ではありません.)
https://www.hackerrank.com/challenges/between-two-sets/problem
問題を理解するのに少し時間がかかりましたが...最初はどういう意味だったのか...
に答える
a = [2, 4]
b = [16, 32, 96]
結論はaの倍数と同時にbの弱い整数個数を求める問題である.まずaの最小公倍数4を求め、次にbの最大公倍数16を求め、4と16の中間値のbを含む約数の個数を求める.
この例では、4、8、16の3つの答えが正しいので、3を返します.
(12は4の倍数ですが、16の約数ではないので正解ではありません.)
// 최대공약수
func gcd(_ a: Int, _ b: Int) -> Int {
if b == 0 {
return a
} else {
return gcd(b, a%b)
}
}
// 최소공배수
func lcm(_ a: Int, _ b: Int) -> Int {
return a * b / gcd(a, b)
}
func getTotalX(a: [Int], b: [Int]) -> Int {
// Write your code here
var lcmNumber: Int = a.count > 1 ? lcm(a[0], a[1]) : a[0]
var gcdNumber: Int = b.count > 1 ? gcd(b[0], b[1]) : b[0]
if a.count > 2 {
for idx in 2..<a.count {
lcmNumber = lcm(a[idx], lcmNumber)
}
}
if b.count > 2 {
for idx in 2..<b.count {
gcdNumber = gcd(b[idx], gcdNumber)
}
}
var now: Int = lcmNumber
var ans = 0
while now <= gcdNumber {
var check: Bool = true
for number in b {
if number % now != 0 {
check = false
break
}
}
if check {
ans += 1
}
now += lcmNumber
}
return ans
}
Reference
この問題について([Swift] HackerRank - Between Two Set), 我々は、より多くの情報をここで見つけました https://velog.io/@kerri/Swift-HackerRank-Between-Two-Setテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol