while True: # 무한 입력
try: #무한 입력이기 때문에 파일의 끝 에러 EOF에러를 잡아주기 위한 try,catch 구문 작성
n = int(input())
num = 0
square = 0
while True:
num += (10**square)
if num % n == 0 :
print(square+1)
break
square += 1
except EOFError: #파일의 끝에러 EOFError를 처리
break
이번 문제는 n의 배수중에 모든 자리의 수가 1인 값의 자리수를 출력하는 문제이다.
처음에 이 문제를 풀었을 때는 아래와 같이 n에 1부터 하나씩 곱해가면서, 각 자리의 수가 모두 1인지 확인해가며 풀었다.
while True:
input_data = int(input())
mul = 1
while True:
n = input_data * mul
length = len(str(n))
is_only_one = False
for i in range(length):
if n % 10 != 1 :
break
if (i == length-1) and n%10 == 1:
is_only_one = True
break
n = n // 10
if is_only_one:
print(length)
break
mul += 1
하지만 이 방법으로 풀게 되면 자리수가 커질수록 값이 커지고, 시간초과가 발생하게 된다.
따라서 n의 배수를 일일이 1로만 이루어진 수인지 체크하는 것이 아니라, 반대로 1, 11, 111을 만들어가면서 n으로 나누어 떨어지는지(num % n == 0) 확인하면서 풀이하여야 한다.
수학과 관련된 문제를 풀어볼 수 있었던 좋은 문제였다 :)
'Algorithm 💡 > Math' 카테고리의 다른 글
[백준 1037번] 약수 (0) | 2023.04.14 |
---|