(코딩테스트) 기사단원
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 }
= 코틀린에 알맞는 단순명료한 문법과 알고리즘을 접목시켰다.
'개발자 과정 > Kotlin' 카테고리의 다른 글
계산식 문자열 필터링, 파싱 (0) | 2024.04.23 |
---|---|
계산기 만들기 (0) | 2024.04.22 |
(코딩테스트) 덧칠하기 (코틀린에서 index skip) (0) | 2024.04.17 |
(코딩테스트) 모의고사 (0) | 2024.04.16 |
(코딩테스트) 과일 장수 (0) | 2024.04.11 |