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