Old_SWIFT(221012)/코딩테스트

약수의 개수 구하기

KataRN 2022. 6. 7. 12:05
반응형

안녕하세요. KataRN 입니다.

 

오늘은 약수의 개수를 구해보겠습니다.

 

 

사실 1부터 N까지의 숫자로 나눠서 나머지가 0인 것을 구하면 됩니다.

 

하지만 코딩테스트를 공부하면서 느낀게 다른 방법이 있으면 알아두는게 좋은것같아서 짧게나마 기록하고자 합니다.

 

제곱근에 소수점이 없으면 약수의 갯수가 홀수고 있으면 짝수입니다.

 

예제 : 프로그래머스 약수의 개수와 덧셈 (https://programmers.co.kr/learn/courses/30/lessons/77884)

import Foundation

func solution(_ left:Int, _ right:Int) -> Int {
    var answer = 0

    for number in left...right{
        if floor(sqrt(Double(number))) == sqrt(Double(number)) {
            answer -= number
        } else {
            answer += number
        }
    }
    return answer
}

 

221126 추가내용)

func cal(_ N : Int) -> Int {
    var i = 1
    var answer = 0
    while i*i <= N {
        if(N % i == 0){
            if(i*i == N){
                answer += 1
            }else{
                answer += 2
            }
        }
        i += 1
    }
    return answer
}

 

위의 코드를 아래처럼 바꾸니 시간초과가 났다...

그냥 위처럼 쓰자...

func cal(_ num: Int) -> Int {
    var count = 0
    let n = Int(sqrt(Double(num)))
    (1...n).forEach {
        if num % $0 == 0 {
            count += 2
        }
    }
    if n * n == num {
        count -= 1
    }   
    return count
}

제곱근까지만 확인해서 2씩 추가하되 5*5처럼 가운데 숫자는 1번만 추가하기 위한 방법.

 

자세한 설명은 아래 블로그가 잘되어있습니다.

https://dev-in-gym.tistory.com/182

 

[Swift] countFactors 약수구하기 코딜리티 코딩테스트

특정 수의 약수를 구하는 방법은 가장 쉬운 방법으로 1~ 반값 만큼 반복문을 돌린후 0으로 나누어 떨어지는값을 고르면 된다. public func solution(_ N : Int) -> Int { if(N == 1 ){return 1} var arr = [N] let center =

dev-in-gym.tistory.com

 

오늘도 짧은 글 읽어주셔서 감사합니다.

반응형

'Old_SWIFT(221012) > 코딩테스트' 카테고리의 다른 글

행렬의 곱셈  (0) 2022.09.13
글자 < - > 숫자 변환 UnicodeScalar() 다루기  (0) 2022.06.03
코딩테스트용 참고사전  (0) 2022.03.14
순열과 조합  (0) 2021.11.15
소수 구하기  (0) 2021.10.18