본문으로 바로가기

C언어 - 개미수열

category Programming/C 언어 2017. 9. 18. 17:46



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


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



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


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



전개 과정은 다음과 같다.


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;
}


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




맨 위로