티스토리 뷰
코드카타
기사단원의 무기
문제
정답
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 버튼을 누르면 해당 프로젝트를 웹에 배포할 수 있다.
검색어 설정과 도메인 설정도 따로 가능하다.
따라 만든 프로젝트
해당 프로젝트는 chagGPT의 API를 활용해
엑셀의 수식을 알려주는 챗봇을 구현한 프로젝트이다.
'내일배움캠프 > Android 사전캠프' 카테고리의 다른 글
사전캠프 TIL 25일차 (로또의 최고 순위와 최저 순위 - Kotlin) (0) | 2024.05.26 |
---|---|
사전캠프 TIL 23일차 (덧칠하기 - Kotlin | FlutterFlow - 관리자 페이지 & 댓글 기능 구현) (0) | 2024.05.23 |
사전캠프 TIL 22일차 (모의고사, 소수 만들기 - Kotlin | FlutterFlow - 로그인/회원가입 구현) (0) | 2024.05.21 |
사전캠프 TIL 21일차 (카드 뭉치, 과일 장수 - Kotlin | FlutterFlow - 레이아웃 짜기) (0) | 2024.05.21 |
사전캠프 TIL 20일차 (2016년 - Kotlin, 앱 개발 용어정리 1) (0) | 2024.05.17 |