오랜만에 다시 하는 코딜리티...
A와 B 사이에 K로 나눴을 때 몫이 0이 되는 수가 몇 개인지 세는 문제입니다.
https://app.codility.com/demo/results/trainingGDW5F8-WJ7/
Test results - Codility
Write a function: function solution(A, B, K); that, given three integers A, B and K, returns the number of integers within the range [A..B] that are divisible by K, i.e.: { i : A ≤ i ≤ B, i mod K = 0 } For example, for A = 6, B = 11 and K = 2, your f
app.codility.com
A와 B사이를 for문으로 1 step씩 검증하면 당연하게도 time exceed가 발생합니다.
function solution(A, B, K) {
let startNum = 0;
for (let i=A; i<B+1; i++) {
if (i % K === 0) {
startNum = i;
break;
}
}
return Math.floor(((B - startNum) / K)) + 1;
}
그래서 나름 방법을 바꿔 봤습니다.
만약 A, B, K가 각각 3, 10, 2일 경우 가장 작은 배수인 4를 startNum이라고 합니다.
10 - 4 = 6 이고, 6 안에 2의 배수가 몇 개가 있는지 세서 거기서 startNum을 포함시켜야 하니까 +1을 해줍니다.
근데 문제는 A, B의 값이 같을 때 1이 나온다는 것입니다.
function solution(A, B, K) {
if (A === B && A !== 0) return 0;
let startNum = 0;
for (let i=A; i<B+1; i++) {
if (i % K === 0) {
startNum = i;
break;
}
}
return Math.floor(((B - startNum) / K)) + 1;
}
그래서 수정된 코드는 위와 같습니다... 거참... 생각할 게 많은 코드군요.
경계값 테스트의 중요성은 이미 많이 말했으니 적지 않겠습니다.
'IT > JavaScript & TypeScript' 카테고리의 다른 글
| [Inner Circle] FE과정 3-4주차 정리 (0) | 2025.04.16 |
|---|---|
| [TypeScript] Record 해시 테이블로 switch문 대체하기 (0) | 2025.03.06 |
| [TypeScript] 파라미터 전달에 대한 고찰 (0) | 2025.02.20 |
| [TypeScript] enum, const enum, as const (0) | 2025.02.10 |
| [IT] FE 레거시 코드 리팩토링 강의 정리 3 (feat. 데이터 분석) (0) | 2025.01.20 |