문제
https://www.acmicpc.net/problem/4375
문제해설
처음 문제를 봤을 때 뭔말인가 이해하는데 좀 걸렸다.
예를들어 3이라는 수가 주어지면 3의 배수중에 1로만 이루어진 수를 찾는 것이다.
그 수 중 가장 작은 수를 찾으면 된다. 3의 배수 중 1로만 이루어진 가장 작은 수는 111이다.
그래서 정답은 111의 자릿수인 3이다.
문제풀이
그냥 문제 그대로 구현했다. 다만 c++로 하면 long long 범위를 벗어나기 때문에 python으로 짰다.
1부터 시작해서 10을 곱하고 1을 더해서 그 수가 입력받은 수로 나눠질 수 있는지 확인했다.
이 문제는 eof를 사용해야한다. 파이썬에서 eof는 try except를 사용하면 된다.
백준에서도 가능한 방법이다. except로 eof에러가 나면 break를 걸면 된다.
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while True:
try:
x = int(input())
except EOFError:
break
if x == 1:
print('1')
continue
num = 1
cnt = 1
while True:
num = num * 10 + 1
cnt += 1
if (num % x) == 0:
print(cnt)
break