1868. 파핑파핑 지뢰찾기(D4) 본문
- 소스 코드 -
| 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 80 81 82 83 84 | import java.util.Scanner; public class Solution1868 {     static int num;     static int dx[] = { -1, -1, -1, 0, 0, 1, 1, 1 };     static int dy[] = { 0, 1, -1, -1, 1, -1, 0, 1 };     static int map[][];     static boolean check[][];     static void solution(int x,int y) {         check[x][y]=true;         for(int i=0;i<8;i++) {             // 주변 칸이 방문하지 않은 0일 경우 해당 칸에 solution 실행              if(map[x+dx[i]][y+dy[i]]==0&&!check[x+dx[i]][y+dy[i]]) {                 solution(x+dx[i],y+dy[i]);             }             // 0의 주변 칸이 숫자일 경우 방문 처리             else if(map[x+dx[i]][y+dy[i]]!=-1&&map[x+dx[i]][y+dy[i]]!=99&&!check[x+dx[i]][y+dy[i]]) {                 check[x+dx[i]][y+dy[i]]=true;             }         }     }     public static void main(String[] args) {         Scanner scan = new Scanner(System.in);         int T = scan.nextInt();         for (int test_case = 1; test_case <= T; test_case++) {             num = 0;             int N = scan.nextInt();             map = new int[N + 2][N + 2];             check = new boolean[N + 2][N + 2];             //////////////////// 1 입력받기 ///////////////////////////             for (int i = 0; i <= N + 1; i++) {                 String str="";                 if(i!=0&&i!=N+1) {                     str=scan.next();                 }                 for (int j = 0; j <= N + 1; j++) {                     if (i == 0 || i == N + 1 || j == 0 || j == N + 1) {                         map[i][j] = -1; // 맵 바깥                     } else {                         if(str.charAt(j-1)=='.') {                             map[i][j]=1;                         }else {                             map[i][j]=99; // 지뢰                         }                     }                 }             }             //////////////////// 2 주변 지뢰 개수 세기 ///////////////////////////             for(int i=1;i<=N;i++) {                 for(int j=1;j<=N;j++) {                     if(map[i][j]==1) {                         int count=0;                         for(int k=0;k<8;k++) {                             if(map[i+dx[k]][j+dy[k]]==99) {                                 count++;                             }                         }                         map[i][j]=count;                     }                 }             }             //////////////////// 3 0들 먼저 처리하기 ///////////////////////////             for(int i=1;i<=N;i++) {                 for(int j=1;j<=N;j++) {                     if(map[i][j]==0&&!check[i][j]) {                         solution(i,j);                         num++;                     }                 }             }             //////////////////// 4 남아있는 숫자들 처리하기 ///////////////////////////             for(int i=1;i<=N;i++) {                 for(int j=1;j<=N;j++) {                     if(map[i][j]!=0&&map[i][j]!=-1&&map[i][j]!=99&&!check[i][j]) {                         num++;                     }                 }             }             System.out.printf("#%d %d\n",test_case,num);         }     } } | cs | 
'알고리즘 문제풀기 > SW Expert Academy' 카테고리의 다른 글
| 1264. 이미지 유사도 검사(D6) (1) | 2019.05.03 | 
|---|---|
| 7193. 승현이의 수학공부(D3) (0) | 2019.03.06 | 
| 1861. 정사각형 방(D4) (0) | 2019.03.06 | 
| 6960. 자영이의 퍼스트 솔브(D6) (0) | 2019.02.26 | 
| 1907. 모래성 쌓기 (D5) (0) | 2019.01.25 | 
			  Comments