티스토리 뷰

 

이번 포스팅은 백준 알고리즘 사이트의 1110번 더하기 사이클 문제를 C 언어로 코딩해보도록 하겠습니다. 아래 url로 접속하시면 문제를 볼 수 있습니다.

 

https://www.acmicpc.net/problem/1110

 

이번 포스팅은 지난 포스팅과 같은 단계로 if문 사용해보기 단계 마지막 문제입니다.

 

 

이 문제의 경우 100보다 작은 수 하나를 입력 받아 각 자리 수를 더해 1의 자리 수를 새로운 수의 1의 자리에, 원래 수의 1의 자리를 10의 자리로 만들어 계속해서 더해가다 입력 받은 수와 같은 수가 나올 때까지의 횟수를 구하는 문제입니다.

 

 

이를 좀 더 쉽게 그림으로 표현한 것입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
void main() {
    int input, tmp = 0, ten, one, res = 0, cnt = 0;
    scanf("%d"&input);
    tmp = input;
 
    while (1) {
        if (tmp < 10)    ten = 0;
        else    ten = tmp / 10;
        one = tmp % 10;
 
        res = ten + one;
        cnt++;
 
        ten = tmp % 10;
        one = res % 10;
        tmp = (ten * 10+ one;
 
        if (tmp == input)
            break;
    }
    printf("%d", cnt);
}
 

 

우선 사이클을 구할 수를 입력 받을 input 변수와 사이클을 돌리기 위한 tmp, 각 자리의 수를 저장할 ten과 one, 십의 자리 수와 일의 자리 수를 더해 저장할 res 변수와 사이클 수를 구할 cnt를 0으로 초기화 해줍니다.

 

input을 입력 받고, input 값을 tmp에 전달하여 줍니다.

 

while문을 무한 반복시키고, 만약 tmp 값이 10보다 작으면, 즉 한자리 수 일 때는 십의 자리 수를 저장하는 ten 변수에 0을 넣아줍니다. 그렇지 않을 때는 ten에 tmp/10을 한 값을 넣어 십의 자리 수를 저장해주고, one에는 tmp%10의 값을 저장해 일의 자리 수를 넣어줍니다. ten과 one에 저장된 수를 res를 통해 더해주고, cnt를 증가시켜 사이클을 1회 증가시켜줍니다.

 

그런 다음 새로운 수의 조합을 만들기 위해 ten에 tmp%10의 값, 즉 원래 수의 일의 자리를 넣어주고, one에는 새로운 값의 일의 자리를 넣어준 후, tmp에 각 자리를 더해 만든 새로운 수를 저장하여 줍니다.

 

if문을 사용해 tmp의 값과 원래 입력 받은 input 값이 같으면 while문을 멈추기 위한 break함수를 사용해 멈춰주고, 그때까지의 cnt값 즉 사이클 횟수를 출력해주시면 됩니다.

 

 

다음 포스팅에서는 다음 단계의 문제를 풀어보도록 하겠습니다.

 

다음 포스팅에서 봐요 :))

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함