Algorithm/Math

[백준 4375번] 1

킹우현 2023. 4. 14. 15:47

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