[C언어 코드업 문제풀이] CodeUp 1520 : 생명 게임 2

코드업 1520번 생명 게임2 문제 풀이 해답입니다.

 

1. 문제 설명

 

생명 게임을 일반화 시켜보자.

이번에는 격자판의 크기 a * b가 주어지고,

생명이 태어나기 위한 조건(x), 생명을 유지하기 위한 최소 조건(y), 생명이 죽는 최소 조건(z)이 입력으로 주어진다.

룰은 아래 링크를 따라 생명게임 1을 참고하고(생명게임 1에서 조건들을 일반화 시킴),

k세대가 지난 후의 모습을 출력하시오. 

 

2. 입력

 

첫번째 줄에 격자판의 크기 행 a, 열 b가 입력된다. (1<=a<=170, 1<=b<=170)

두번째 줄에는 생명이 태어나기 위한 이웃의 수 x, 생명이 살기 위해 필요한 최소 이웃 수 y, 생명이 죽는 최소 이웃수 z가 입력된다. (0 <= x, y, z <= 8)

세번째 줄부터는 a*b 격자판의 크기에 격자값이 입력된다. 1은 생명이 존재하는 것이고, 0은 생명이 존재하지 않는다는 것이다.

마지막 줄에 k가 입력된다. ( 1 <= k <= 1,000 )

 

3. 출력

 

k 세대가 지난 후의 모습을 출력하시오.

 

4. 입력 예시

 

5 5

2 1 5

1 1 1 0 0

0 1 0 1 1

0 0 1 1 0

0 1 0 1 0

0 0 1 1 1

1

 

5. 출력 예시

 

1 1 1 0 1

0 1 0 1 1

1 0 0 1 0

0 1 0 0 0

0 1 1 1 1 

 

격자판의 크기 5*5가 입력됩니다.

 

주변에 2마리의 생명이 존재하면 생명이 탄생하고,

 

생명을 유지하기 위해선 최소 1명의 이웃이 있어야 되고,

 

5명 이상의 이웃이 있을 시 죽습니다.

 

한 세대가 지난 후에 생명이 있는 경우를 1, 없는 경우를 0으로 출력합니다.

 

k가 1이므로 1세대 지난 후의 모습을 출력한 것입니다.

 

6. 문제 풀이

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
 
int a[172][172], b[172][172], i, j;
int n, m, k, birth, live, death;
     
int main()
{
    scanf("%d %d"&n, &m);
    scanf("%d %d %d"&birth, &live, &death);
    for(i = 1; i <= n; i++)
        for(j = 1 ;j <= m; j++)
        {
            scanf("%d"&a[i][j]);
            b[i][j] = 0;
        }
    scanf("%d"&k);
 
    while(k--)
    {
        for(i = 1; i <= n; i++)
            for(j = 1; j <= m; j++)
            {
                b[i][j] = a[i-1][j-1+ a[i-1][j] + a[i-1][j+1+ a[i][j-1+ a[i][j+1+ a[i+1][j-1+ a[i+1][j] + a[i+1][j+1];
                if(a[i][j] == 0)
                    b[i][j] = b[i][j] == birth ? 1 : 0;
                else
                    b[i][j] = (live <= b[i][j] && b[i][j] < death) ? 1 : 0;
            }
 
        for(i = 1; i <= n; i++)
            for(j = 1; j <= m; j++)
                a[i][j] = b[i][j];          
    }
 
    for(i = 1; i <= n; i++, puts(""))
        for(j = 1; j <= m; j++)
            printf("%d ", b[i][j]);
    return 0;
}
 
 
 

 

댓글()