본문 바로가기
[C++] 알고리즘 교육/1~4. 기본기

[알고리즘 3.1.13] 간단한 완전 탐색 - mine

by 안산학생 2019. 4. 26.

문제


지뢰찾기라는 게임은 맵에서 지뢰들이 어디에 있는지 유추해내는 게임이다. 이 게임 프로그램은 플레이어가 어떤 지점을 클릭했을 때 그 지점 주변(상, 하, 좌, 우, 대각선, 총 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
61
62
63
64
65
66
67
68
#include <stdio.h>
 
int main() {
 
  int x, y, sx, sy;
  scanf("%d %d %d %d"&x, &y, &sx, &sy);
  
  int i,j;
  int arr[x][y];
  
  //지뢰갯수
  int mine = 0;
  
  for(i=0; i<x; i++){
    for(j=0; j<y; j++){
      scanf("%d",&arr[i][j]);
    }
  }
  
  if(arr[sx-1][sy-1]==1){
    printf("game over");
  }else{
    //선택한 곳 주변의 지뢰 갯수
    //12시
    if(arr[sx-2][sy-1==1){
      mine++;
    }
    //1시
    if(arr[sx-2][sy] ==1){
      mine++;
    }
    //3시
    if(arr[sx-1][sy] ==1){
      mine++;
    }
    //5시
    if(arr[sx][sy] ==1){
      mine++;
    }
    //6시
    if(arr[sx][sy-1==1){
      mine++;
    }
    //7시
    if(arr[sx][sy-2==1){
      mine++;
    }
    //9시
    if(arr[sx-1][sy-2==1){
      mine++;
    }
    //11시
    if(arr[sx-2][sy-2==1){
      mine++;
    }
    printf("%d", mine);
  }
  
  // for(i=0; i<x; i++){
  //   for(j=0; j<y; j++){
  //     printf("%d ",arr[i][j]);
  //   }
  //   printf("\n");
  // }
  
  
  return 0;
}
 

댓글