// 내 코드
#include <stdio.h>
int main() {
int input;
int count = 0;
int original_tens, original_units;
int tens, units, res;
scanf("%d", &input);
if (input <= 9 && input != 0) {
input = input * 10;
}
original_tens = input / 10;
original_units = input % 10;
tens = original_tens;
units = original_units;
do {
res = tens + units;
if (res > 9) {
res = res % 10;
}
tens = units;
units = res;
count++;
} while (!(original_tens == tens && original_units == units));
printf("%d", count);
}
// 인터넷 코드
#include <stdio.h>
int main(void) {
int a, b, c, d = -1, result, input, count = 0;
scanf("%d", &input);
result = input;
while (d != result) {
a = input / 10;
b = input % 10; // 주어진 수의 가장 오른쪽 자리 수
c = (a + b) % 10; // 앞에서 구한 합의 가장 오른쪽 자리 수
d = (b * 10) + c; // 새로운 수
input = d;
count++;
}
printf("%d", count);
}
나는 문제 풀이를 일반적으로 생각하는 방식대로 하였다. 여기서 예외적인 상황에 대한 것을 조금 추가한 것이 다이다.
일단 사용자로부터 입력값을 받는다. 이때 입력값이 10보다 작다면 입력값을 2자리로 만들어주고 시작한다.
이후 각 숫자의 자리 수를 때서 개별 저장하고, 다음 계산을 위한 수 역시 따로 때서 저장합니다.
한번 계산한 상태에서 계산한 값이 10보다 작다면 2자리 수로 만들어주고 while문을 통해 원래의 입력값이 나올때까지 반복합니다.
이후 값을 찾으면 값을 찾기까지 걸린 카운트를 출력합니다.
많은 고민을 하게 해준 문제였다.
나는 아직 문자열이나 숫자를 잘게 나누고 붙이고 하는 것에 익숙하지 않기 때문이다.
문제 이해는 되었지만, 코드로 옮기는게 쉽지 않았다.
문제를 푼 후 찾아본 인터넷 답 코드는 굉장히 간략하게 나와있어 어떻게 하면 간략하고 효율적으로 코드를 짜야할지 생각해보는 계기가 되었다.