백준 웹사이트 "1110번 - 더하기 사이클" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#include <stdio.h>
int main(void){
int first_N, N;
scanf("%d", &first_N);
N = first_N;
int cycle = 0;
while(1){
int digit_sum = N/10 + N%10; // N의 자릿수들의 합
N = (N%10)*10 + digit_sum%10; // 새로운 N
cycle++;
if(first_N == N) // 반드시 while문의 마지막에 검사
break;
}
printf("%d\n", cycle);
}
문제 풀이
N을 처음 입력 받으면, while 루프에 들어가기 전에 Line 6와 같이 처음 N의 값을 (first_N에) 저장해주어야 합니다. while 루프에 들어가면 계속해서 N이 새로운 수로 바뀌기 때문에 기록해주는 것입니다.
while 루프에 들어가면, Line 10과 Line 11처럼 문제의 지시대로 새로운 숫자를 만듭니다. 또한, 'cycle'은 이 while 루프가 반복된 총 횟수로, 0으로 시작하여 while문이 한 번 시행될때마다 1씩 증가되도록 합니다. 중요한 것은 'cycle'을 처음 0으로 선언할 때, while문의 밖에서 선언하는 것입니다. 만약 이를 while문 내에서 선언하게 되면, while문이 반복될 때마다 cycle을 덮어씌워 0으로 새로 선언하기 때문에 반복 횟수에 대한 정보를 잃게 됩니다.
한 루프의 마지막에는 first_N에 저장되어 있는 N의 초기값과 비교하여, 만약 일치한다면 while문을 빠져나가도록 합니다. 만약 이 검사를 앞부분에서 시행한다면, while문을 바로 빠져나가기 때문에 마지막에 겁사합니다.
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 2562번 - 최댓값 (0) | 2021.12.31 |
---|---|
[백준/C언어] 10818번 - 최소, 최대 (3) | 2021.12.30 |
[백준/C언어] 10951번 - A+B - 4 (0) | 2021.12.29 |
[백준/C언어] 10952번 - A+B - 5 (0) | 2021.12.29 |
[백준/C언어] 10871번 - X보다 작은 수 (0) | 2021.12.28 |