티스토리 뷰

코드카타

 

기사단원의 무기

 

문제

 

정답

class Solution {
    fun solution(number: Int, limit: Int, power: Int): Int {

        fun findDiv(n: Int): Int {
            val s = Math.sqrt(n.toDouble()).toInt()
            return (1..s).count { n % it == 0 } * 2 - (if (s * s == n) 1 else 0)
        }

        var divArr = IntArray(number) { findDiv(it + 1) }
        divArr.forEachIndexed { i, v ->
            if (v > limit) divArr[i] = power
        }

        return divArr.sum()
    }
}

코틀린 내장함수를 사용하면 코드를 가독성있게 쓸 수 있다.

 

fun findDiv(n: Int): Int {
    val s = Math.sqrt(n.toDouble()).toInt()
    return (1..s).count { n % it == 0 } * 2 - (if (s * s == n) 1 else 0)
}

문제 해결을 위해 n의 약수 개수를 구하는 함수를 작성해준다.

 

문제의 제한사항에서 number의 값은 최대 10만까지임을 알려주는데 그 때문에

1 ~ n 까지의 수 중에서 n과 나누어 떨어지는 수의 개수를 구하는 로직으로 함수를 짜면 시간초과가 나게 된다.

 

제곱근을 사용하여 탐색범위를 대폭 줄임으로써 시간초과를 방지한다.

"1 ~ n의 제곱근 까지의 범위를 탐색하고 나누어떨어지는 수의 개수"를 구한 뒤 2를 곱해준다.

 

n이 제곱수에 해당한다면 그 수에서 1을 빼주면 된다.

n이 1에 해당하면 1을 반환하고, 소수에 해당한다면 2를 반환하게 된다. 

 

var divArr = IntArray(number) { findDiv(it + 1) }
divArr.forEachIndexed { i, v ->
    if (v > limit) divArr[i] = power
}

divArr을 1 ~ number 의 약수개수를 담은 배열로 초기화 해준다.

divArr의 요소 중 limit보다 큰 값이 있다면 그 요소의 값을 power로 초기화한다.

 

return divArr.sum()

마지막으로 배열 요소의 합을 출력한다.

 


 

FlutterFlow 4주차 숙제

 

만든 프로젝트를 배포하고 그 링크를 제출하는 것이 이번주 숙제이다.

 

 

플랫폼 설정

 

플랫폼 세팅에서 웹을 활성화 시킨다.

 

 

웹 배포

 

Publish 버튼을 누르면 해당 프로젝트를 웹에 배포할 수 있다.

검색어 설정과 도메인 설정도 따로 가능하다.

 

 

따라 만든 프로젝트

 

Pracitce

Built with FlutterFlow.

pracitce-knddmp.flutterflow.app

 

해당 프로젝트는 chagGPT의 API를 활용해 

엑셀의 수식을 알려주는 챗봇을 구현한 프로젝트이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함