더하기 사이클(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의 사이클 길이를 출력한다.
while문 내부
새로운 수를 만드는 과정
일단 숫자를 입력받고
숫자를 잘라서 비교하는 것은 무한루프(while)으로 진행해야할듯
무한루프 안에서 일의 자리 숫자(one)과 십의 자리 숫자(ten)으로 나눈다
나눈 숫자를 더해서 새로운 숫자를 만들고
만든 새로운 수의 일의 자리 숫자(rone)을 자른다
처음 나눈 숫자 중 일의 자리 숫자 와 새로 만든 수의 일의 자리 숫자를 붙힌다
붙힌다는 것은 one을 십의 자리 숫자로, rone을 일의 자리 숫자로 새로운 수를 만듬
-> 이렇게 과정을 거치고 나면 사이클이 한번 돈 것이니까 count를 하나 늘려준다
-> 만약 생성된 새로운 수가 처음 입력한 수와 같다면 무한 루프를 종료시켜야 하기 때문에 if문으로 처리
*여기서 tmp이라는 변수를 사용한 이유는
무한루프를 진행 시, 일의 자리 숫자와 십의 자리 숫자를 나누는 과정을 거치기 위해서는 지속해서 변경되는 변수가 필요
무한루프를 통해서 생성되는 마지막 수를 처음에 입력한 수와 같은지 비교하기 위해서는 입력받은 값(n)을 유지할 필요가 있음
그렇기 때문에 tmp라는 변수를 사용했고 처음에도 무한루프에 들어가기 전에 변수(tmp)에 입력받은 n값을 넣었다
Last updated
Was this helpful?