내일배움캠프/Android 사전캠프
사전캠프 TIL 24일차 (기사단원의 무기 - Kotlin | FlutterFlow 프로젝트 웹배포)
하몬드
2024. 5. 24. 15:24
코드카타
기사단원의 무기
문제
정답
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를 활용해
엑셀의 수식을 알려주는 챗봇을 구현한 프로젝트이다.