본문 바로가기
프로그래밍/CodeUp

CodeUp[Q_2018] : 개미 수열

by 조원일 2020. 3. 14.
728x90

1. 문제

https://codeup.kr/problem.php?id=2018

 

개미 수열

 각 행의 마지막에는 공백을 하나 넣은 뒤 줄바꿈하시기 바랍니다. (표현에러 사유)

codeup.kr

[출처 : 코드업(https://codeup.kr/)]

이 문제는 제목 그대로 개미 수열을 구하는 문제이다

1 : 1이 1개이므로 -> 1   1

2   1 : 2가 1개, 1이 1개이므로 -> 2   1   1   1

1   1 : 1이 2개이므로 -> 1   2

이런식으로 계속 나열하는것을 개미 수열이라고 한다.


1

1  1

1  2

1  1  2  1

1  2  2  1  1  1

 

 

2. 해답

#include <stdio.h>

int arr[25][9999] = { 0, };

int main() {
	int a, b, c, tmp, p;

	arr[0][0] = 1;

	scanf("%d %d", &a, &b);


	for (int i = 1; i < b; i++) {
		tmp = arr[i - 1][0];
		p = 0;
		c = 1;
		for (int j = 1; j < 9999; j++) {
			if (arr[i-1][j] == 0) {
				// 이전 배열의 값이 0일경우
				// 0은 -> 한줄이 끝남을 의미
				arr[i][p++] = tmp;
				arr[i][p] = c;
				break;
			}
			else if (arr[i-1][j] != tmp) {
				// 0이 아닌값중 tmp와 다른 수가 나오면
				arr[i][p++] = tmp;
				arr[i][p++] = c;
				tmp = arr[i-1][j];
				c = 1;
			}
			else c++;
		}
	}

	for (int i = a - 1; i < b; i++) {
		for (int j = 0; j < 9999; j++) {
			if (arr[i][j] != 0) printf("%d ", arr[i][j]);
			else break;
		}
		printf("\n");
	}
	return 0;
}