(코딩테스트) 기사단원

2024. 4. 17. 14:14개발자 과정/Kotlin

https://school.programmers.co.kr/learn/courses/30/lessons/136798

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이의 선택과정

1.  약수의 개수를 구하는 로직에 시간제한이 있다.

2. 그것만 하면 어려울건 없는 문제이다. 

 

문제고민

약수를 구하는 로직에 수학을 못넣는다.

이실직고 하자면, 단순 카운팅은 만들 수 있지만, 

   시간 단축을 위해 계산식을 넣어야 하는데 그건 모른다.

 

해결방안

구글링해서 있는 알고리즘을 쓰자!

약수의 개수 구하는 알고리즘코틀린에 맞게 리폼하자!

   코드 구조를 개선하는건 잘 하니까 말이다.

정답풀이

import java.lang.Math.sqrt

class Solution {
    private fun getCount(n: Int):Int=
        (1..sqrt(n.toDouble()).toInt()).filter { n%it==0 }
            .sumOf { +if(it==n/it) 1 else 2 }

    fun solution(number: Int, limit: Int, power: Int): Int {
        var answer = 0
        for (i in 1..number) {
            answer += if (getCount(i) > limit) power else getCount(i)
        }
        return answer
    }
}

 

핵심로직

private fun getCount(n: Int):Int=
        (1..sqrt(n.toDouble()).toInt()).filter { n%it==0 }
            .sumOf { +if(it==n/it) 1 else 2 }

= 코틀린에 알맞는 단순명료한 문법 알고리즘을 접목시켰다.