[swift] 프로그래머스 – N개의

프로그램 제작자

코드 중심 개발자를 고용하십시오. 배치 기반 위치 매칭. 프로그래머의 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.

Programmer.co.kr


문제 해결을 돕기 위해 내 솔루션그리고 개선된 솔루션승강기.
해결한 후에는 다른 사람의 해결 방법도 살펴보십시오. 언급할 가치가 있는 참조또한 증가합니다.

– 문제에 따라 내 솔루션있을 수 밖에 없다
– 이러한 솔루션은 솔루션 중 하나일 뿐이며 최상의 솔루션이 아닐 수 있습니다.


내 솔루션

func solution(_ arr:(Int)) -> Int {
    var maxNum = arr.max()!
    let plusNum = arr.max()!
    while true {
        if arr.filter({ maxNum % $0 == 0 }).count == arr.count { break }
        else { maxNum += plusNum }
    }
    return maxNum
}

문제는 여러 수의 최소 공배수를 찾는 것입니다.

문제를 살펴보면 공식을 사용하여 최대 공약수를 찾아야 합니다.

최소 공배수를 찾을 필요가 없는 것 같았습니다.

나머지 숫자를 배열에서 가장 큰 숫자의 배수로 나눕니다.

0으로 나누어 떨어지는 수가 최소공배수라면,

나머지 숫자를 배수로 나누어 정답을 찾기 위해 while 문을 실행했습니다.


언급할 가치가 있는 참조

func gcd(_ a: Int, _ b: Int) -> Int {
  let r = a % b
  if r != 0 {
    return gcd(b, r)
  } else {
    return b
  }
}

func lcm(_ m: Int, _ n: Int) -> Int {
  return m / gcd(m, n) * n
}
func solution(_ arr:(Int)) -> Int {
    return arr.reduce(1) { lcm($0, $1) }
}

최대 공약수를 구하는 공식으로 풀 수 있는 문제입니다.