ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 파이썬 1110번] 더하기 사이클 알고리즘 python
    Algorithm/Baekjoon 2022. 3. 31. 19:17

    조건

    1. 0보다 크거나 같고, 99보다 작거나 같은 정수 >>> 0이 주어질 경우 생각

    2.10보다 작으면 앞에 0을 붙여 두 자리 수로 만든다.

    3. 각 자리의 숫자를 더하고, 앞 숫자의 오른쪽자리 수와 현재 더한 값의 오른쪽 수를 붙여 새로운 수를 만든다.

     

    발상

    처음의 발상

    문자열로 받아서 사용하려고 하다가 로직을 머리로 짜려다 보니, 형변환을 자주해줘야하는 점과 헷갈리고 귀찮아진다는 점이 마음에 들지 않아, 숫자로 풀어보려 노력함.

    두 번째 발상

    10의 몫과 나머지를 활용하면 쉽겠다라고 생각했다.

     

    조건 1번  : 0이 들어올 때, 몫은 0 나머지는 0 두 개의 합 0으로 한 번의 실행으로 종료

    조건 2번 : 1~9이 들어올 때, 몫은 0 나머지 1~9로 문자열이 아닌 정수라 0을 붙여준다는 생각을 굳이 안 해도된다.

    조건 3번 :

    이전 값 >>> 이전_값_몫, 이전_값_나머지

    지금 값(이전 값의 각 자리수의 합) >>> 지금_숫 = 전_몫+전_나머지

    다음 값(이전 값의 뒷자리와 지금 값의 뒷자리) >>> 이전_값_나머지 * 10   +  지금_값_나머지

     

    결론

    전 숫자의 몫과 나머지, 그리고 지금 숫자의 나머지를 가지고 풀면된다.

     

    n = int(input())
    comp = n
    count = 0
    while True:
        valu, reminder = divmod(comp,10) #몫과 나머지
        plus = (valu + reminder)%10		#다음 값의 1의 자리 => 지금 값을 10으로 나눈 나머지 값
        comp = reminder*10 + plus		#다음 값
        count += 1 
        if comp == n:
            break
    print(count)

    한 글화

    받는_값 = int(input())
    기준_값 = 받는_값
    횟수 = 0
    while True:
        이전_값_몫, 이전_값_나머지 = divmod(기준_값,10) #여기서 기준_값은 이전_값
        지금_값 = 이전_값_몫 + 이전_값_나머지
        지금_값_나머지 = 지금_값%10
        기준_값 = 이전_값_나머지*10 + 지금_값_나머지		#여기서 기준_값은 다음_값
        횟수 += 1 
        if 기준_값 == 받는_값:
            break
    print(횟수)

     

    내가 기억하려고 쓰는 블로그

    반박하는 글, 조언 등 감사하는 마음으로 받겠습니다.

    응원 댓글이나 좋아요도 너무 감사합니다.

    댓글

Designed by Tistory.