주어진 숫자가 29로 나누어 떨어지는지 확인하는 것은 아주 간단한 문제입니다. 나머지 연산자(%)를 사용하면 숫자를 29로 나눈 나머지가 0인지 검사하여 손쉽게 판별할 수 있습니다.
나머지가 0이면 해당 숫자는 29의 배수이고, 0이 아니면 29로 나누어 떨어지지 않는 숫자입니다.
예제
입력
29 254
출력
1 0
29는 29로 정확히 나누어 떨어지므로 1(참)이 출력되고, 254는 29로 나누면 나머지가 남으므로 0(거짓)이 출력됩니다.
알고리즘
- 검사할 숫자 n을 입력받습니다.
- n을 29로 나눈 나머지(n % 29)를 계산합니다.
- 나머지가 0이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
C++ 구현
다음은 위 알고리즘을 C++로 구현한 코드입니다.
#include <bits/stdc++.h>
using namespace std;
bool isDivisibleBy29(long long n) {
return n % 29 == 0;
}
int main() {
cout << isDivisibleBy29(29) << endl;
cout << isDivisibleBy29(234567876543) << endl;
cout << isDivisibleBy29(234567657329) << endl;
return 0;
}매개변수를 long long 타입으로 선언한 이유는 매우 큰 수도 문제없이 처리할 수 있도록 하기 위함입니다.
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
1 1 0
29와 234567876543은 29로 나누어 떨어지므로 1이 출력되고, 234567657329는 나누어 떨어지지 않으므로 0이 출력됩니다.
마무리
이처럼 나머지 연산자(%) 하나만 활용하면 어떤 숫자든 특정 수로 나누어 떨어지는지 O(1) 시간 복잡도로 빠르게 판별할 수 있습니다. 이 방법은 29뿐만 아니라 임의의 수에 대해서도 동일하게 적용할 수 있습니다.