백준 1110번 - 더하기 사이클
문제 출처
코드
// 내 코드
#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문을 통해 원래의 입력값이 나올때까지 반복합니다.
이후 값을 찾으면 값을 찾기까지 걸린 카운트를 출력합니다.
느낀 점
많은 고민을 하게 해준 문제였다.
나는 아직 문자열이나 숫자를 잘게 나누고 붙이고 하는 것에 익숙하지 않기 때문이다.
문제 이해는 되었지만, 코드로 옮기는게 쉽지 않았다.
문제를 푼 후 찾아본 인터넷 답 코드는 굉장히 간략하게 나와있어 어떻게 하면 간략하고 효율적으로 코드를 짜야할지 생각해보는 계기가 되었다.
Author And Source
이 문제에 관하여(백준 1110번 - 더하기 사이클), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vdoring/백준-1110번-더하기-사이클저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)