ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1490. [Python]자리수로 나누기
    Python_알고리즘/Gold V 2023. 11. 1. 00:59

    1. 문제

     

    https://www.acmicpc.net/problem/1490

     

    1490번: 자리수로 나누기

    첫째 줄에 어떤 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

    www.acmicpc.net

     

    2. 접근 방법

     

    • 시간 제한: 2초
    • 메모리 제한: 128MB
    • 브루트 포스

     

    3. 파이썬 코드

     

    import math
    
    # 숫자를 리스트로 받아옴
    nums = list(map(int, input()))
    # 리스트 숫자를 합칠 변수
    number = ""
    # 최소공배수를 구할 변수
    answer = 1
    # 리스트를 반복해가며 0이 아닌 값들의 최소공배수를 구하고 숫자를 합쳐줌
    for i in nums:
        if i != 0:
            answer = math.lcm(answer, i)
        number += str(i)
    # 합친 숫자를 정수로 변환
    number = int(number)
    # 바로 나누어 떨어지는지 확인하기 위한 몫을 구함
    answer_check = number // answer
    # 바로 나누어 떨어질 경우 바로 출력
    if answer_check * answer == number:
        print(number)
    # 외의 경우
    else:
        # start 변수에 number 숫자를 넣어줌
        start = number
        # 뒤에 숫자를 붙일 길이 체크
        str_length = 1
        # 무한루프 실행
        while True:
            # check 라는 변수에 start 값 + 0 * str_length 를 더붙여줌
            check = int(str(start) + "0" * str_length)
            # 10의 str_length 제곱수 만큼 반복문시행
            for i in range(10**str_length):
                # 만약 나누어 떨어지면 종료
                if check % answer == 0:
                    print(check)
                    exit()
                # check 값을 1씩 더해나감
                check += 1
            # 반복문 종료하면 0의 길이를 추가
            str_length += 1

     

    4. 문제를 풀고난 후 생각

     

    • 들어온 N 값을 그대로 가지고 있으며 그 각 자리수로 나누어 떨어지는 수를 구하는 문제이기 때문에 기존의 들어온 숫자를 그대로 할당해주고 그 변수에 0을 자리수로 추가해나가며 접근했다.

    예시를 들어서 접근하는 방식이 좋을 것 같아서 생각을 별도로 작성하진 않았다.

    예시1. N = 13 

    1과 3의 최소공배수 => 3

    13 % 3 != 0 이므로 13에 0을 한개붙인 130 부터 값을 체크하기 시작함

    130 % 3 != 0 이므로 131 로 넘어감

    131 % 3 != 0 이므로 132

    132 % 3 == 0 이므로 132 출력하게됨.

     

    예시2. N = 83

    3과 8의 최소공배수 => 24

    830 ~ 839 까지는 24로 나눠떨어지지 않기 때문에 str_length 를 1증가시킨 8300 부터 값을 비교하기 시작함.

    8300 % 24 != 0 이므로 8301

    8301 % 24 != 0 이므로 8302

    8302 % 24 != 0 이므로 8303

    8303 % 24 != 0 이므로 8304

    8304 % 24 == 0 이므로 8304를 출력하게 됨

     

    위와 같은 방식으로 0의 갯수를 증가해 나가며 값들을 비교하는 코드를 구현함.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 브루트 포스

    'Python_알고리즘 > Gold V' 카테고리의 다른 글

    1593. [Python]문자 해독  (1) 2023.12.28
    1263. [Python]시간 관리  (1) 2023.12.21
    1374. [Python]강의실  (0) 2023.10.30
    1245. [Python]농장 관리  (1) 2023.10.21
    7490. [Python]0 만들기  (0) 2023.10.11

    댓글

Designed by Tistory.