백준 1110번 - 더하기 사이클

8001 단어 while문while문

문제 출처

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문을 통해 원래의 입력값이 나올때까지 반복합니다.

이후 값을 찾으면 값을 찾기까지 걸린 카운트를 출력합니다.

느낀 점

많은 고민을 하게 해준 문제였다.

나는 아직 문자열이나 숫자를 잘게 나누고 붙이고 하는 것에 익숙하지 않기 때문이다.

문제 이해는 되었지만, 코드로 옮기는게 쉽지 않았다.

문제를 푼 후 찾아본 인터넷 답 코드는 굉장히 간략하게 나와있어 어떻게 하면 간략하고 효율적으로 코드를 짜야할지 생각해보는 계기가 되었다.

좋은 웹페이지 즐겨찾기