728x90
https://school.programmers.co.kr/learn/courses/30/lessons/136798
풀이
처음 풀었던 방식 ->
func solution(_ number:Int, _ limit:Int, _ power:Int) -> Int {
var divisors = 0
for i in 1 ... number {
var count = 0
for j in 1 ... i {
if i % j == 0 {
count += 1
}
}
if count > limit {
count = power
}
divisors += count
}
return divisors
}
시간 초과 발생......
단순히 이중 for문을 사용하게 되면 1부터 number까지 하나하나 다 구해야해서
number의 범위인 100,000개까지 계산 시 속도는 현저히 떨어지므로
number의 제곱근을 이용한다.
func solution(_ number:Int, _ limit:Int, _ power:Int) -> Int {
var divisors = 0
for i in 1 ... number {
var count = 0
let sqrtNumber = Int(sqrt(Double(i)))
for j in 1 ... sqrtNumber {
if i % j == 0 {
if j * j == i {
count += 1
} else {
count += 2
}
}
}
if count > limit {
count = power
}
divisors += count
count = 0
}
return divisors
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스: 완전탐색 - 카펫 (0) | 2023.10.07 |
---|---|
프로그래머스: 월간 코드 챌린지 시즌1 - 이진 변환 반복하기 (1) | 2023.10.06 |
프로그래머스: 2018 카카오 블라인드 채용 - [1차] 캐시 (0) | 2023.07.21 |
프로그래머스: 과일 장수 (0) | 2023.07.20 |
프로그래머스: 귤 고르기 (0) | 2023.07.16 |
댓글