[Baekjoon] 4375번 1
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 8029 | 2705 | 2105 | 33.810% |
문제
2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.
출력
1로 이루어진 n의 배수 중 가장 작은 수의 자리수를 출력한다.
예제 입력 1
3
7
9901
예제 출력 1
3
6
12
알고리즘 분류
문제 풀이
풀이 과정
문제 자체를 이해하는데 시간이 조금 오래걸렸지만 문제를 이해하고 푸는 것까지는 쉬웠다.
2와 5로 나누어 떨어지지 않는 정수를 입력하였을 때 그 정수의 배수 중에서 1로만 구성된 숫자 중 최솟값을 찾는 문제였다.
여기서 1로만 구성된 숫자란 (1, 11, 111, 1111,….) 와 같은 숫자들을 말하는 것이다.
아래 코드를 보면 알겠지만 첫 번째 풀이 코드는 런타임에러(EOFError) 가 발생하였다. 직접 테스트 케이스를 넣어본 결과 모두 잘 나오는 것을 확인했음에도 저런 에러가 발생한 것은 이번이 처음이라 조금 당황했던 것 같다.
검색을 통해 알아보니 이 문제는 입력 갯수가 주어지지 않았기 때문에 while, try를 사용하여 python의 EOF를 처리해 주어야 하는 것이었다.
제출 코드: 실패
def sol(n):
one = 1
idx = 1
while True:
if one % n == 0:
a = list(str(one))
return len(a)
else:
one += 10*idx
idx *= 10
while True:
n = int(input())
print(sol(n))
1, 11, 111, 1111 과 같은 패턴을 만들면서 입력 받은 정수와 modulo 연산을 통해 0이 나오면 n의 배수인 점을 활용하여 코드를 짰다.
제출 코드: 성공1
while True:
try:
n = int(input())
one = 1
idx = 1
while True:
if one % n == 0:
a = list(str(one))
print(len(a))
break
else:
one += 10*idx
idx *= 10
except EOFError:
break
제출 코드: 성공2
while True:
try:
n = int(input())
except EOFError:
break
one = 1
idx = 1
while True:
if one % n == 0:
a = list(str(one))
print(len(a))
break
else:
one += 10*idx
idx *= 10
사실 의미는 없지만 try-except 구문을 위 두 가지 방법으로 모두 해 보았고 그 결과 1번 방법이 더 시간이 짧은 것을 확인 할 수 있었다.
댓글남기기