https://www.acmicpc.net/problem/4375
4375번: 1
2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오.
www.acmicpc.net
이 문제는 수학 문제이다. 나머지 연산자를 사용하여 단순히 계속 나누면 타임 아웃이 발생한다.
이 문제를 풀려면 나머지 연산의 분배법칙에 대해 알아야 한다.
(A + B) % p = ((A % p) + (B % p)) % p
(A * B) % p = ((A % p) * (B % p)) % p
(A - B) % p = ((A % p) - (B % p) + p) % p
%연산은 위와 같은 분배 법칙이 성립한다.
4375에 적용해보면 1, 11, 111, 1111, 11111, 111111...은 1, (10+1), (110+1), (1110+1), (11110+1)...으로 나타낼 수 있다.
예를 들면
111%3 = (110%3 + 1%3)%3으로 나타낼 수 있다.
따라서 이전에 구한 나머지 값에 10을 곱하고 1을 더한 후 a로 나눠주면 된다.
import java.util.*;
public class Main {
public static void main(String[] args){
int a, i;
Scanner sc = new Scanner(System.in);
int n=1;
while(sc.hasNextInt()) {
a=sc.nextInt();
n=1;
for(i=1; n%a!=0; i++)
{
n=(n*10)%a + 1;
n%=a;
}
System.out.println(i);
}
}
}
'프로그래밍 > 백준 문제풀이' 카테고리의 다른 글
백준 17427: 약수의 합 2 (0) | 2022.08.18 |
---|---|
백준 1037: 약수 (0) | 2022.08.12 |
백준 1316: 그룹 단어(JAVA) / (0) | 2022.08.10 |
백준 1920: 수 찾기 / 이진 탐색(binary search) (0) | 2022.08.09 |
백준 1929: 소수 구하기(JAVA) / 에라토스테네스의 체 (0) | 2022.08.09 |