본문 바로가기
Algorithm

백준 4375번: 1(JAVA)

by bjgu97 2021. 12. 26.
반응형

https://www.acmicpc.net/problem/4375

 

4375번: 1

2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오.

www.acmicpc.net

 

[코드]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		while(true) {
			String s = br.readLine();
			if(s == null)
				break;
			else {
				int n = Integer.parseInt(s);
				int num = 0;
				
				for(int i = 0; ; i++) {
					num = (num * 10 + 1) % n;
					
					if(num == 0) {
						System.out.println(i+1);
						break;
					}
				}
			}
		}
	}
}

 

[풀이]

처음 접근법은 num = 1, 11, 111, ... 증가 시켜가면서 가장 작은 n의 배수를 찾아 나서는 것이었다.

하지만 이렇게 하면 num의 크기가 정수 범위를 벗어나게 되는 경우가 발생한다. (ex: n = 9901)

따라서 num = 10*a + 1 일 떄,

num%n = (10*a + 1) % n 이라는 특성을 이용해 정수 범위 내에서 배수를 구하는 방법을 사용해볼 수 있다.

 

예를 하나 들어보자.

n이 7일때,

1 % 7 = 1

11 % 7 = (1*10 + 1) % 7 = (1%7*10 + 1) % 7

111 % 7 = (11*10 + 1) % 7 = (11%7*10 + 1) % 7

1111 % 7 = (111*10 + 1) % 7 = (111%7*10 + 1) % 7

...

즉, num % 7 = ( (num-1)%7 * 10 + 1) % 7 임을 알 수 있다.

 

 

.

 

'Algorithm' 카테고리의 다른 글

에라토스테네스의 체(JAVA)  (0) 2022.04.09
백준 17425번: 약수의합(JAVA)  (0) 2021.12.26
백준 17427번: 약수의합2(JAVA)  (0) 2021.12.26
백준 2751번: 수 정렬하기2(JAVA)  (0) 2021.11.10
백준 9655번: 돌게임(JAVA)  (0) 2021.11.10

댓글