더하기 사이클_1110

박상민·2023년 10월 1일
0

백준

목록 보기
7/36
post-thumbnail

문제

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

문제 접근

이 문제의 핵심은 산수연산을 잘 활용하여 숫자를 잘 가공해야 한다는 점이다. 입력값에서 10을 나누었을 때 몫과 나머지 연산을 수행하면 각각 자릿수를 뽑아낼 수 있다. 이때 뽑아낸 수를 새로운 변수에 저장하고 각 변수끼리 더해서 다음에 나올 수를 저장할 수 있다.
이를 코드를 통해 나타내면 아래와 같다.

코드

#1110
N = int(input())
num = N
cnt = 0

while(1):
    a = N//10 #첫째 자리
    b = N%10 #둘째 자리
    c = (a+b)%10 #sum 둘째 자리
    N = (b*10)+c #다음 수
    cnt += 1 #사이클 횟수 계산
    if(num == N): #num에서 입력된 n과 똑같은 숫자가 나오면 멈춤
        break

print(cnt)
   

번외(문자열 풀이)

파이썬은 input()으로 어떤 것을 받든지 다 str로 입려고딘 후 list로 저장된다는 특성을 이용해 문자열로 풀이도 가능하다.

문자열 풀이도 코딩테스트에서 정말 많이 쓰인다고 하니 이 방법도 알아두면 좋을 것 같아 번외도 준비하였다.

하지만 문자열 풀이시 시간초과가 뜨게 되는데 이 이유는 세번째 테스트케이스 1이 while문을 많이 돌아서 시간초과가 발생한 것으로 보인다.

이 문제에서는 숫자계산을 통해 풀이하는게 괜찮아보인다.

profile
I want to become a UX Developer

0개의 댓글