728x90
반응형
  • 문제

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

  • 입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.

  • 출력

1로 이루어진 n의 배수 중 가장 작은 수의 자리수를 출력한다.

  • 예제 입력
3
7
9901
  • 예제 출력
3
6
12
  • 접근방식

1, 11, 111 ...을 % n == 0 이면 배수임 → 1의 개수를 카운팅 → 수가 너무 크면 오버 플로우 발생

따라서 모듈러 산술 연산을 이용해야함

모듈러 산술 연산은 분배 법칙이 성립함

11 = 10 +1 이고 111 = 100 + 10 + 1 ... 이런식으로 나아간다

  • 코드
#include <iostream>
#include <algorithm>

using namespace std;

int n;

int main() 
{
	while (cin >> n)
	{
		int cnt = 1, ret = 1; // ret은 1의 갯수

		while (1)
		{
			if (cnt % n == 0) // cnt가 n의 배수이면 종료
			{
				cout << ret << "\n";
				break;
			}
			else
			{
				cnt = (cnt * 10) + 1; // (cnt *10) + 1 을 반복하면 111 = 100+10+1 처럼 만들수 있음
				cnt %= n; // 모듈러 연산으로 오버플로우 방지
				ret++;
			}
		}
	}

	return 0;
}
 

4375번: 1

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

www.acmicpc.net

 

728x90
반응형

'C++ > BOJ' 카테고리의 다른 글

[C++]/백준 1012번 유기농 배추  (0) 2023.01.13
[C++]/백준 2178번 미로 탐색  (0) 2023.01.13
[C++]/백준 1629번 곱셈  (0) 2023.01.12
[C++]/백준 3986번 좋은 단어  (0) 2023.01.12
[C++]/백준 1940 주몽  (0) 2023.01.12

+ Recent posts