TIL 26 | 더하기 사이클 (백준 1110 python)

Gom·2021년 3월 5일
0

Algorithm

목록 보기
5/48
post-thumbnail

코드풀이

정답코드

# 자료 입력
N = int(input())

# 문제 풀이
check = N 
temp = 0
new_N = 0
cycle_count = 0

while True:
    temp = (N//10) + (N%10) -----------------(1)
    new_N = (N % 10)*10 + (temp % 10)
    cycle_count += 1
    N = new_N -------------------------------(2)
    if new_N == check: ----------------------(3)
        break

print(cycle_count)

(1) 입력값을 10의 자리와 1의 자리로 나눈다.
(2) N의 값이 new_N으로 덮어지기 때문에 check 변수가 필요하다.
(3) 계산된 값이 처음 입력된 값과 같아지면 반복문을 종료한다.


오답코드 및 다른 방식풀이

# 자료 입력
N = int(input())

# 문제 풀이
temp = 0
new_N = 0
cycle_count = 0

while True:
    temp = (N//10)+(N % 10) 
    new_N = (N % 10)*10 + (temp % 10)
    cycle_count += 1
    if N == new_N:
        break

print(cycle_count)
  • 위 코드는 시간초과가 나왔다.
  • (원인) 그 이유는 while문에 변수 N을 업데이트 해 주는 부분이 존재하지 않아 같은 숫자로만 반복문이 실행됐던 것이었다.
  • (보완) N이 업데이트 되는 코드를 반복문 안에 포함시키고 N과 new_N를 대조하기 위한 변수를 추가한 후에 통과할 수 있었다.
  • 구글링한 문제 답안을 보면서 check 변수를 별도로 둔 이유를 처음에는 이해하지 못했으나 직접 문제에 봉착해보니 코드 작성자의 의도를 이해할 수 있게 되었다. 유의미한 삽질이었다 !

import sys

n= str(input())
check = n
cnt = 0

while True:
    sum = 0
    for char in n:
        sum += int(char)
    new_num = n[-1]+str(sum)[-1]
    cnt +=1
    if new_num == check:
        print(cnt)
        break
    else:
        n = new_num

참고자료

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

profile
안 되는 이유보다 가능한 방법을 찾을래요

0개의 댓글