본문 바로가기

코딩테스트

[C++] 1차원라이프(Life)게임

숙제 1 (라이프 게임)

셀에있는박테리아들의수는단위시간마다이웃하고있는셀의상태따라아래규칙에따라뀌게된다.

1. 만약 어떤 이웃해있는 셀에 살아있는 박테리아 수의 합이 3보다적으면(<3), 셀에박테리아중에서마리가외로와서죽게된다. 예를들어, 위의예에서6번셀의이웃에는모두2마리의박테리아가있으므로, 6번셀에있는박테리아마리는외로와서죽게된다. 그러나5셀과같이현재박테리아가없는경우에는박테리아의수는변하지않는다.

2.만약어떤셀의이웃해있는셀에살아있는박테리아수의합이7보다크면(>7), 있는테리아중에서마리가갑갑해서죽게된다. 예를들어, 10셀의이웃에는8마리의박테리아가있으므로, 10셀에있는박테리아중에서한마리가죽게된다.

3.만약어떤셀의이웃해있는셀에살아있는박테리아수의합이4, 5, 6 혹은7이면, 셀에박테리아가활발하게활동을하여, 셀에마리의박테리아가늘게된다. 그러나셀에있는박테리아의수는9보다크지지않는다. 예를들어7셀의이웃에는5마리의박테리아가있으므로, 셀에는박테리아가마리늘게된다. 그러나, 2셀의이웃에는5마리박테리아가있으므로, 셀의박테리아가마리늘어날있지만현재셀에는모두아홉마리의박테리아가있으므로이상박테리아의수가늘지않는다.

4.만약어떤셀의이웃해있는셀에살아있는박테리아수의합이정확하게3이며, 셀에있는박테리아의수는변화하지않는다.

#include<iostream>
#include<cstdlib>
using namespace std;


int main(){
	int n=0x00;
	int t=0x00;
	cin>>n>>t;
	int *arr=new int[n];
	int *output=new int[n];
	

	int sum=0x00;

	for(int i=0;i<n;i++){
		cin>>arr[i];
	}
	int j=0;
	while(1){
		for(int i=0;i<n;i++){
			if(i==0) sum=arr[1];
			
			else if(i==n-1) sum=arr[n-2];
			

			else sum=arr[i-1]+arr[i+1];
			
			output[i]=arr[i];
			if(sum<3) {
				if(arr[i]>0) output[i]-=1;}

			if(sum==3) output[i]=arr[i];
			if(sum<=7&&sum>3) {
				if(arr[i]<9) output[i]+=1;}
			if(sum>7) {
				if(arr[i]>0) output[i]-=1;}
		}
			j++;
			if(j==t) break;
			for(int i=0;i<n;i++) arr[i]=output[i];
	
	
	}
	for(int i=0;i<n;i++) cout<<output[i]<<' ';
			
	

	return 0;
}

'코딩테스트' 카테고리의 다른 글

[C++] 방의 크기 구하기  (0) 2021.06.29
[C++] 절단 대각선 (Broken Diagonal)  (0) 2021.06.29
[C++] 제일 작은 수 제거하기  (0) 2021.06.28
[C++] Happy Number  (0) 2021.06.27
[C++] 행렬 곱셈  (0) 2021.06.27