백준

백준 1110 더하기 사이클 파이썬

하카데미 2022. 12. 7. 13:53

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

 

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

 

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

2. 출제의도
- 몫 구하는 연산자(//), 나머지 구하는 연산자(%) 좀 아니?

3. 풀이

# 주석 버전
# 입력된 숫자는 연산에서도 쓰이고 비교할때도 쓰이므로 두 가지 변수에 선언해준다.
n = check = int(input())

# 새로운 숫자, 카운팅할 수, 연산 결과를 0으로 초기화한다.
new_num = cnt = tmp = 0

while True:
    # 각 자리의 숫자를 더한다는 것은
    # 십의 자리 숫자와 일의 자리 숫자를 더한다는 의미다.
    # 따라서 십의 자리일 경우 몫으로 나오고
    # 일의 자리일 경우 나머지로 나오게 된다.
    tmp = (n//10) + (n%10)
    # n%10 과 tmp의 일의 자리를 계산해야한다.
    #따라서 (n%10)*10 을 하여 십의자리 숫자로 만들어 준다.
    new_num = (n % 10)*10 + tmp % 10
    # 루틴이 끝났으니 카운팅을 시작한다.
    cnt += 1
    # 새로운 숫자를 n에 선언한다.
    n = new_num
    #print(cnt, n)          # 카운팅과 숫자를 출력해보고 싶다면.
    
    # 새로운 숫자와 처음 숫자를 비교한다.
    if new_num == check:
        # 참일 경우 멈춤.
        break

print(cnt)
# 코드버전
n = check = int(input())
new_num = cnt = tmp = 0

while True:
    tmp = (n//10) + (n%10)
    new_num = (n % 10)*10 + tmp % 10
    cnt += 1
    n = new_num
    print(cnt, n)
    if new_num == check:
        break

print(cnt)

'백준' 카테고리의 다른 글

백준 2562 최댓값 파이썬  (0) 2022.12.14
백준 10818 최소, 최대 파이썬  (0) 2022.12.13
백준 10951 A+B 파이썬  (0) 2022.12.06
백준 10952 A+B 파이썬  (0) 2022.12.05
백준 10871 X보다 작은 수 파이썬  (0) 2022.11.28