Python) 4375번 1

난이도 : 실버3
유형 : 수학
카테고리 : 백준온라인저지
날짜 : 2022-02-17

문제 풀이

이 문제는 문제를 이해하는데에 시간이 엄청 걸렸던 것 같다. 이게 무슨말이지..? 했던 문제 중 하나였는데 문제를 풀이해보자면 이렇다.

1로만 이루어진(1, 11, 111, 1111…) n의 배수 중 가장 작은 값의 자리수를 출력하는 문제이다. 그리고 입력에는 여러 개의 테스트 케이스가 주어진다고 했으므로 테스트 케이스가 계속 입력될 수 있도록 코드를 구현해야 한다.

예를 들어 n이 3일 경우 111이 1로만 이루어진 3의 가장 작은 배수이다. 111은 3자리이므로 답은 3이다.
n이 7일 경우 111111이 1로만 이루어진 7의 가장 작은 배수이다. 111111은 6자리 이므로 답은 6이다.

쉽게 이야기해서 1, 11, 111...의 수를 반복하면서 n으로 나눴을 때 0으로 딱 떨어지는 수의 자리수를 출력해주면 되는 문제였다.

  1. 입력값과 1,11,111을 만들어주는 수 num, 자리수를 카운트해주는 count 변수를 받는다.

    1
    2
    3
    n = int(input())
    num = 1
    count = 1
  2. while문을 사용하여 num이 1, 11, 111, 1111 …이 되도록 무한반복 시켜준다. 그리고 num의 자리수를 알 수 있도록 하기위해 count를 +1 해주며 반복시켜준다.

    1
    2
    3
    while True :  
    num = (num*10)+1 # 1,11,111 ...
    count+=1
  3. 만약 num % n == 0 이라면 나누어 떨어진 것이기 때문에 break로 반복문을 탈출한다.

    1
    if num%n==0 : break
  4. 문제에서 입력 탈출조건을 제공하지 않기 때문에 EOF(End Of File) 예외처리try,catch문으로 작성한다.

    1
    2
    3
    4
    5
    try :
    .
    . # 중간 코드
    .
    except EOFError : break

전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
while True :
try :
n = int(input())
num = 1
count = 1

while True :
if num%n==0 : break
num = (num*10)+1
count+=1
print(count)

except EOFError : break
Author

Sujeong Kim

Posted on

2022-02-17

Updated on

2022-02-18

Licensed under

댓글