[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;
}
|
'ET의 공부 > C언어 연습문제[ 코드업 ]' 카테고리의 다른 글
[C언어 코드업 문제풀이] CodeUp 1526 : [기초-함수작성] 함수로 hello 문자열 출력하기 (0) | 2020.06.26 |
---|---|
[C언어 코드업 문제풀이] CodeUp 4085 : 농사짓기 가장 좋은 땅 고르기 (0) | 2020.05.11 |
[C언어 코드업 문제풀이] CodeUp 1524 : 지뢰 찾기 1 (0) | 2020.05.11 |
[C언어 코드업 문제풀이] CodeUp 1520 : 생명 게임 2 (0) | 2020.05.11 |
[C언어 코드업 문제풀이] CodeUp 1515 : 생명 게임 1 (0) | 2020.05.11 |