본문 바로가기
Programming/C 언어

C언어 - 개미수열

by WhiteCatter 2017. 9. 18.
반응형



읽고 말하기 수열, 일명 '개미수열'.


이번에는 개미수열 코딩을 알아가보도록 하겠다.



개미수열은 베르나르 베르베르의 소설 '개미'에서 등장해 유명해진 수열이다.


우선 개미수열이 어떤 것인지 간단히 짚고 넘어가자.



전개 과정은 다음과 같다.


1. a[i]를 b[j]에 복사한다.


2. a[i+1] = a[i] 이면 b[j+1] += 1, 아니라면 j+2로 넘어간다.



즉 결과물은 위와 같다.


1

1 1 : 첫번째 줄을 보면 1이 1개이다.

1 2 : 두번째 줄을 보면 1이 2개이다.

1 1 2 1 : 세번째 줄을 보면 1이 1개, 2가 1개이다.

1 2 2 1 1 1 : 네번째 줄을 보면 1이 2개 2가 1개 1이 1개이다.

.

.

.


이렇게 반복해 전개해 나간다.


네이버 지식백과에서 조금 자세하게 설명되어 있다.


링크 : http://terms.naver.com/entry.nhn?docId=3568985&cid=58944&categoryId=58970



위의 전개 과정을 모듈로 만들어 적재적소에 넣으면 된다.


그럼 코드는 다음과 같다.


#include<stdio.h>

void main() {
    int a[100] = { 0, };
    int b[100] = { 0, };
    int n, count, l, i, k;                //count는 숫자가 중복되는 횟수
    a[0] = 1;                               //처음은 1로 시작

    printf("Enter : ");
    scanf("%d", &n);

    printf("%3d\n", a[0]);

    for (int m = 1; m < n; m += 1) {
        i = 0;
        l = 0;
        count = 1;

        while (a[i] != 0) {
            if (a[i + 1] == a[i]) {
                count += 1;
            }
            else {
                b[l] = a[i];
                printf("%3d", b[l]);
                l += 1;

                b[l] = count;
                printf("%3d", b[l]);
                l += 1;
                count = 1;
            }

            i += 1;
        }

        for (k = 1; k < 100; k += 1) {      //배열 복사 모듈
            a[k] = b[k];
            b[k] = 0;
        }
        
        printf("\n");
    }

    return 0;
}


자잘한 설명들은 코드를 보면서 생각하면 해결 될 것이라고 생각한다.



반응형