For Programmer

백준 4375번 파이썬 문제풀이(수학 - 1) 본문

코팅테스트/백준 문제 모음

백준 4375번 파이썬 문제풀이(수학 - 1)

유지광이 2021. 10. 11. 14:20
728x90

나의 코드

while True: #무한 입력
    try: #무한 입력이기 때문에 파일의 끝 에러 EOF에러를 잡아주기 위한 try,catch 구문 작성
        n = int(input())
        abs = '1'
        while True:
            if int(abs) % n == 0: #만약 1,11,111,1111... 이 입력한 n으로 나누어 떨어진다면
                print(len(abs)) #그 1로된 수의 자리수를 출력
                break #그리고 반복문 탈출
            abs += '1' #1,11,111,1111.... 형식으로 증가시키기 위해 문자1에 1을 더해준다.
    except EOFError: #파일의 끝에러 EOFError를 처리한다.
        break

-> 이문제는 반대로 생각하는 것이 어려울 수 있다. 처음에는 n을 입력받아 n을 1부터 계속해서 곱해나가면서 제일 처음 1로된 배수가 나오면 그 수의 자리수를 출력하고 탈출하는 프로그램을 작성했는데 그렇게 하니 시간초과가 계속해서 발생했다.

따라서 위와같이 범위가 제한이 없고 수의 범위가 굉장히 넓은 문제는 역으로 생각해서 나머지를 이용하여 문제를 해결해야 한다.

또한 문제에서 입력 탈출조건을 제공하지 않았기 때문에 EOF(End Of File) 예외처리를 try,catch문으로 작성해야 한다. 

728x90
Comments