코딩테스트
[C++] 1차원라이프(Life)게임
뇨롱
2021. 6. 29. 11:14
숙제 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;
}