이번 글에서는 Java를 활용하여 X로 나누어 떨어지는 가장 큰 K자리 숫자를 찾는 방법을 알아보겠습니다. 핵심 아이디어는 간단합니다. 먼저 K자리 수 중 가장 큰 값인 10^K - 1을 구한 뒤, 여기서 X로 나눈 나머지를 빼주면 조건을 만족하는 가장 큰 수를 얻을 수 있습니다.
예제 코드
import java.io.*;
import java.lang.*;
public class Demo{
public static int largest_k(int val_1, int val_2){
int i = 10;
int MAX = (int)Math.pow(i, val_2) - 1;
return (MAX - (MAX % val_1));
}
public static void main(String[] args){
int val_1 = 25;
int val_2 = 2;
System.out.println("The largest 2 digit number divisible by 25 is ");
System.out.println((int)largest_k(val_1, val_2));
}
}출력 결과
The largest 2 digit number divisible by 25 is 75
코드 설명
Demo 클래스 안에는 largest_k라는 정적 메서드가 정의되어 있습니다. 이 메서드는 두 개의 매개변수를 받습니다.
- val_1(X): 나누는 기준이 되는 값
- val_2(K): 자릿수를 의미하는 값
메서드 내부에서는 먼저 Math.pow(10, val_2)를 이용해 10의 K제곱을 계산하고, 여기서 1을 빼 K자리 수 중 최댓값을 MAX 변수에 저장합니다. 예를 들어 K가 2라면 MAX는 99가 됩니다.
그다음 MAX - (MAX % val_1)을 반환합니다. 즉, 최댓값에서 X로 나눈 나머지를 빼면 그 값 이하에서 X의 배수이면서 가장 큰 K자리 수를 얻게 됩니다. 위 예제에서는 99에서 99를 25로 나눈 나머지인 24를 빼므로 결과는 75가 됩니다.
main 메서드에서는 x = 25, k = 2 두 값을 설정한 후 largest_k 메서드를 호출하고, 그 결과를 콘솔에 출력합니다.
정리
이 접근 방식은 반복문 없이 수학적 연산만으로 답을 구하기 때문에 시간 복잡도가 O(1)로 매우 효율적입니다. 다양한 X와 K 값에 응용할 수 있으니 직접 여러 입력값으로 테스트해 보시기 바랍니다.