세 개의 정수 A, B, K가 주어집니다.
함수는 구간 [A..B] 안에 있는 정수 중 K로 나누어 떨어지는 수의 개수를 반환해야 합니다.
즉, 아래 집합의 원소 개수를 구하는 문제입니다:
{ i : A ≤ i ≤ B, i mod K = 0 }
---
예시:
A = 6, B = 11, K = 2일 때,
[6..11] 구간 안에서 2로 나누어 떨어지는 수는 6, 8, 10 → 총 3개입니다.
따라서 결과는 3을 반환해야 합니다.
---
구현 조건:
class Solution {
public int solution(int A, int B, int K);
}
이 함수를 작성하세요.
주어진 범위 [A..B] 안의 정수들 중 K로 나누어 떨어지는 수의 개수를 반환해야 합니다.
---
추가 조건:
- A와 B는 [0..2,000,000,000] 범위의 정수입니다.
- K는 [1..2,000,000,000] 범위의 정수입니다.
- A ≤ B를 항상 만족합니다.
- 효율적인 알고리즘을 작성해야 합니다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class CountingDiv
{
public int solution(int A, int B, int K)
{
// K로 나누어 떨어지는 수란 곧 K의 배수를 의미함.
// 1. 먼저 1부터 B까지 K의 배수가 몇개 있는지 구한다.
// 2. 그 다음 1부터 A-1까지 K의 배수가 몇개 있는지 구한다.
// 3. 1에서 구한 값에서 2에서 구한 값을 빼면,
// A부터 B까지 K의 배수가 몇개 있는지 구할 수 있다.
if (A == 0)
{
// 0도 K의 배수이므로 +1
return B / K + 1;
}
int totalUpToB = B / K;
int beforeA = (A - 1) / K;
return totalUpToB - beforeA;
}
}
|
cs |
'코딜리티 > Lesson' 카테고리의 다른 글
| GenomicRangeQuery (누적합) (0) | 2025.09.18 |
|---|---|
| PassingCars (누적합) (0) | 2025.09.17 |
| MaxCounters (지연 갱신) (0) | 2025.09.15 |
| PermCheck (순열) (0) | 2025.09.15 |
| FrogRiverOne (0) | 2025.09.15 |