https://school.programmers.co.kr/learn/courses/30/lessons/136798
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
class Solution {
fun solution(number: Int, limit: Int, power: Int): Int {
var answer: Int = 0
var factorList = arrayListOf<Int>()
var count = 0
for(i in 1..number){
for(j in 1..i){
if(i % j ==0){
count++
}
}
factorList += count
count = 0
}
factorList.map {
if(it > limit){
answer += power
}
else answer += it
}
return answer
}
}
로직은 간단해서 그냥 바로바로 쳤더니 역시 생각없이 친 코드는 시간초과다,,ㅎㅎ
약수를 구하는 과정을 좀 단순하게 해야할 것 같다.
import kotlin.math.sqrt
class Solution {
fun solution(number: Int, limit: Int, power: Int): Int {
var answer: Int = 0
var count = 0
for(i in 1..number){
var sqrtNum = sqrt(i.toDouble()).toInt()
var count = 0
for(j in 1..sqrtNum){
if(i%j==0){
if (i / j == j) count += 1
if (i / j != j) count += 2
}
}
if(count>limit) answer+=power
else answer+=count
}
return answer
}
}
약수를 구하는 방법을 찾아보니 제곱근을 통해서 시간복잡도를 조금 해결해줄 수 있는 방법을 찾았다.
만약 100의 약수를 찾는다면 100의 제곱근인 10까지의 약수[1,2,5,10]를 구한 후 100을 10까지의 약수로 나눠진 값을 합치고 중복된 숫자를 Set나 다른 방법으로 제거하고 count해주면 된다.
하지만 나는 조금 더 간결하게 해봤다. 결국에 1을 제외하고 나머지 약수에서 결국엔 2개씩의 카운트가 나오기에 위의 코드처럼 짰다.
통과!
'Code KATA' 카테고리의 다른 글
Programmers 옹알이 (2) with Kotlin (1) | 2023.12.12 |
---|---|
Programmers 로또의 최고 순위와 최저 순위 with Kotlin (0) | 2023.12.11 |
Programmers 덧칠하기 with Kotlin (1) | 2023.12.07 |
Programmers 소수 만들기 with Kotlin (0) | 2023.12.06 |
Programmers 완전 탐색 모의고사 with Kotlin (1) | 2023.12.05 |