문제
지뢰찾기라는 게임은 맵에서 지뢰들이 어디에 있는지 유추해내는 게임이다. 이 게임 프로그램은 플레이어가 어떤 지점을 클릭했을 때 그 지점 주변(상, 하, 좌, 우, 대각선, 총 8곳)에 지뢰가 몇개가 있는지를 알려준다.
플레이어는 가장 적은 클릭을 통해, 지뢰들이 어디에 있는지를 유추해 내는 것이 목적인 게임이다. 중간에 지뢰가 있는 지점을 클릭하면 게임오버된다.
이때 어떤 지점을 클릭했을 때, 주변에 몇개의 지뢰들이 존재하는지를 출력하는 프로그램을 작성해보자
입력
첫째 줄에 게임의 맵의 크기를 나타내는 정수 N과 M이 주어진다. N은 맵의 행 수, M은 맵의 열 수를 나타낸다. N, M은 5이상 100이하의 수이다.
둘째 줄에는 플레이어가 클릭한 지점의 위치 X와 Y가 주어진다. X는 행 번호, Y는 열 번호를 나타낸다. (행 번호는 1이상 N이하, 열 번호는 1이상 M이하의 수이다.)
셋째 줄부터 N줄에 걸쳐 NxM 게임 맵의 상태가 주어진다. 이때 0은 지뢰가 없는 지점을 1은 지뢰가 있는 지점을 나타낸다.
출력
클릭된 지점 주변에 있는 지뢰의 개수를 출력한다. 클릭된 지점이 지뢰가 있는 지점이면 game over를 출력한다.
예제 입력
9 8
4 5
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 1 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 0 0
예제 출력
4
예제 입력
9 8
4 6
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 1 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 0 0
예제 출력
game over
#코드
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
|
import java.util.*;
import java.io.*;
public class Main{
public void getResult(int[][] myArr, int X, int Y, int N, int M) {
int cnt = 0;
// 상, 하, 좌, 우
int[] dx = {-1, 1, 0, 0};
int[] dy = {0, 0, -1, 1};
// 대각선
int[] dx2 = {-1, 1, 1, -1};
int[] dy2 = {-1, 1, -1, 1};
for(int i = 0; i < 4; i++) {
int nx = dx[i] + X;
int ny = dy[i] + Y;
if((0 <= nx && nx < N) && (0 <= ny && ny < M) && myArr[nx][ny] == 1) {
cnt += 1;
}
nx = dx2[i] + X;
ny = dy2[i] + Y;
if((0 <= nx && nx < N) && (0 <= ny && ny < M) && myArr[nx][ny] == 1) {
cnt += 1;
}
}
System.out.println(cnt);
}
public static void main(String[] args) throws Exception {
// Please Enter Your Code Here
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[][] myArr = new int[N][M];
st = new StringTokenizer(br.readLine());
int X = Integer.parseInt(st.nextToken()) - 1;
int Y = Integer.parseInt(st.nextToken()) - 1;
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < M; j++) {
myArr[i][j] = Integer.parseInt(st.nextToken());
}
}
if(myArr[X][Y] == 1) {
System.out.println("game over");
} else {
Main start = new Main();
start.getResult(myArr, X, Y, N, M);
}
}
}
|
cs |
'CS > 알고리즘_문제풀이(자바)' 카테고리의 다른 글
행렬 뒤집기 2 (0) | 2021.09.01 |
---|---|
행렬 뒤집기 (0) | 2021.09.01 |
대표값 (0) | 2021.08.31 |
class president (0) | 2021.08.31 |
attackrange (0) | 2021.08.30 |