[C언어 코드업 문제풀이] CodeUp 1525 : 크레이지 아케이드

코드업 1525번 크레이지 아케이드 문제 풀이 해답입니다.

 

1. 문제 설명

 

게임 "크레이지 아케이드"를 구현해보자.

10*10 크레이지 아케이드 게임 현황이 주어진다.

0은 빈공간을 뜻한다.

1 이상의 수는 물풍선으로, 물풍선은 자신의 숫자만큼 상하좌우로 터진다.

-1은 장애물로, 물풍선이 터질때 물줄기가 여기 닿으면 멈춘다.

그 후 플레이어의 수 n이 입력되고, n개의 플레이어의 행,열이 주어진다.

이 때, 플레이어는 장애물에 위치하지 않는다.

물풍선이 모두 터질 때의 정보를 출력하는 프로그램을 작성하라.

그 방법은 다음과 같다.

1. 보드판을 출력한다.(0은 빈공간, -1은 장애물, -2는 물풍선, 플레이어는 입력된 순서+1로 표현한다.)

2. 플레이어의 생존 유무를 출력한다.

 

2. 입력

 

10*10의 보드판이 입력된다.

11번째 줄에 플레이어의 수 n이 입력된다.(1<=n<=8)

12번째 줄부터 플레이어 위(행, 열)가 입력된다.

 

3. 출력

 

물풍선이 터진 후의 상태를 출력한다.

 

4. 입력 예시

 

0 0 0 -1 0 -1 -1 0 1 -1

3 0 -1 0 -1 -1 1 0 0 0

0 -1 3 -1 1 0 0 0 0 0

0 -1 -1 0 0 0 0 0 0 0

-1 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 5 0 0 0 0 0 0

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 0 0 0

3

2 2

10 10

3 3

 

5. 출력 예시

 

-2 0 0 -1 0 -1 -1 -2 -2 -1

-2 -2 -1 0 -1 -1 -2 -2 -2 0

-2 -1 -2 -1 -2 -2 -2 0 0 0

-2 -1 -1 -2 -2 0 0 0 0 0

-1 0 0 -2 0 0 0 0 0 0

0 0 0 -2 0 0 0 0 0 0

0 0 0 -2 0 0 0 0 0 0

-2 -2 -2 -2 -2 -2 -2 -2 -2 0

0 0 0 -2 0 -2 -2 -2 0 0

0 0 0 -2 0 0 -2 0 0 2

Character Information

player 1 dead

player 2 survive

player 3 dead

 

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
 
 
 
int main()
{
    int map[22][22= {};
    int player[9][2= {};
    int n;
    for(int i = 1; i <= 10; i ++){
        for(int j = 1; j <= 10; j ++){
            scanf("%d ",&map[i][j]);
        }
    }
    
    //0빈공간, -1 장애물 -2 물풍선, 플레이어 -> 입력된 순서 + 1
    for(int i = 1; i <= 10; i ++){
        for(int j = 1; j <= 10; j ++){
            if(map[i][j] > 0){ //풍선이 있으면
                int ballon = map[i][j];
                int up = 0;
                int down = 0;
                int right = 0;
                int left = 0;
                for(int k = 1; k<= ballon; k++){
                    map[i][j] = -2;
                    if(map[i+k][j] != -1 && down == 0 && map[i+k][j]<=0){map[i+k][j] = -2;}
                    else if(map[i+k][j] == -1){down = 1;}
                    
                    if(map[i-k][j] != -1 && up == 0 && map[i-k][j]<=0 ){map[i-k][j] = -2;}
                    else if(map[i-k][j] == -1){up = 1;}
                    
                    if(map[i][j+k] != -1 && right == 0 && map[i][j+k]<=0){map[i][j+k] = -2;}
                    else if(map[i][j+k] == -1){right = 1;}
                    
                    if(map[i][j-k] != -1 && left == 0 && map[i][j-k]<=0){map[i][j-k] = -2;}
                    else if(map[i][j-k] == -1){left = 1;}
                }
            }
        }
    }
    
    scanf("%d",&n);
    
    for(int i = 1; i <= n; i++){
        scanf("%d %d",&player[i][0],&player[i][1]);
        if(map[player[i][0]][player[i][1]] == 0){
            map[player[i][0]][player[i][1]] = i;
        }
 
    }
    
    for(int i = 1; i <= 10; i ++){
        for(int j = 1; j <= 10; j ++){
            printf("%d ",map[i][j]);
        }
        printf("\n");
    }
    
    printf("Character Information\n");
    for(int i = 1; i <= n; i++){
        int x,y;
        x = player[i][0];
        y = player[i][1];
        if(map[x][y] == i){
            printf("player %d survive\n",i);
        }
        else//장애물에는 놓을수 없으므로 고려안함
            printf("player %d dead\n",i);
        }
        
    }
    
 
    
    
    return 0;
}
 
 

 

댓글()