[BOJ/백준-Python]1110번 - 더하기 사이클

1110번 - 더하기 사이클

문제

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.

위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

첫째 줄에 N의 사이클 길이를 출력한다.

예제 입력 1

26

예제 출력 1

4

예제 입력 2

55

예제 출력 2

3

예제 입력 3

1

예제 출력 3

60

예제 입력 4

0

예제 출력 4

1

예제 입력 5

71

예제 출력 5

12

해결할 방법을 생각해보자.💡

입력예제 2번과 5번으로 실제 과정을 적어보자.

  • N이 55일때, 3회라고 적혀있다.

    • 5+5 = 10 -> 50

    • 5+0 = 5 -> 05
    • 0 + 5 = 55
  • N이 71일때, 12회라고 적혀있다.

    • 7 + 1 = 8 -> 18

    • 1+ 8 = 9 -> 89

    • 8+9 = 17 -> 97

    • 9+7 = 16 -> 76

    • 7+6 = 13 -> 63

    • 6+3 = 9 -> 39

    • 3+9 = 12 -> 92

    • 9+2 = 11 -> 21

    • 2+1 = 3 -> 13

    • 1+3 = 4 -> 34

    • 3+4 = 7 -> 47

    • 4+7 = 11 -> 71

과정은 이런 식으로 진행이 된다. 그렇다면 사이클 횟수를 While문을 사용해서 어떻게 구해야할까?

정수형으로 계산하는 방법이 있고, 문자열 인덱스를 이용해서 계산하는 방법이 있다.

나는 정수형으로 입력 받아서 처리하는 방식으로 설명을 적어보겠다.

우선 계산을 위한 정수를 입력 받아야한다.

N = int(input())

그리고 나서 계산 횟수를 나타내는 변수를 만들어준다.

cycle = 0

입력 받은 정수 N은 while문을 빠져나오기 위해서 그대로 두어야 하고, N의 값을 그대로 가져서 계산에 활용할 수 있는 a를 만들어준다.

a = N

이제 while문 내에서의 코드를 생각해봐야한다.

위 과정을 보면 입력받은 정수들은 한 자리 ~ 두 자리의 정수다.

따라서, 10으로 나눠서 계산하는 방식을 생각해볼 수 있다.

만약 55가 들어왔다고 가정해보면, 10으로 나눴을 때 몫은 5, 나머지는 5다. 몫과 나머지를 더해서 10이나온다. 여기서, 기존에 있던 나머지 5에 10을 곱한 값과, 계산으로 나온 10에서 일의 자리의 값이 더해진 50이라는 값이 나오게 되며 다음 사이클에서 사용된다. 이런 과정이 한 사이클이다. 이것을 코드로 정리해보자.

while True:
    # 입력받은 정수 a를 10으로 나눴을 때 몫과 나머지를 더해줌
    b = a // 10 + a % 10
    # 계산 과정에서 나머지에 10을 곱해주고, 계산된값 b의 일의 자리 수와 더해주며 한 사이클 완성
    a = a % 10 * 10 + b % 10
    cycle += 1

이렇게 while문을 짤 수 있다. 여기서 중요한 점은 while문을 탈출하는 조건인데, 이는 아까 맨 처음 받은 N과 사이클에 사용되는 정수 a가 같았을 때 break 해주면 된다.

	if a == N:
        print(cycle)
        break

코드💻

import sys
input = sys.stdin.readline
N = int(input())
cycle = 0
a = N

while True:
    b = a // 10 + a % 10
    a = a % 10 * 10 + b % 10
    cycle += 1
    if a == N:
        print(cycle)
        break

해결 로그

문제 푼 날짜 체크
2022-03-09
   
   
   
   

2022

[web]jQuery 복습 3

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

13 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

14 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

5 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

10 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑