세 개의 정수 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

+ Recent posts