https://www.acmicpc.net/problem/4396
4396번: 지뢰 찾기
첫 번째 줄에는 10보다 작거나 같은 양의 정수 n이 입력된다. 다음 n개의 줄은 지뢰의 위치를 나타낸다. 각각의 줄은 n개의 문자를 사용하여 한 행을 나타낸다. 온점(.)은 지뢰가 없는 지점이며 별
www.acmicpc.net
저는 구현을 통해 문제를 해결하였습니다.
클릭한 곳의 8방향의 지뢰개수를 확인하였고 이 값을 결과 배열에 넣었습니다.
만약 클릭한 곳이 한 곳이라도 지뢰가 있다면, 모든 지뢰를 결과 배열에 표시하여 문제를 해결하였습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
private static final char OPEN = 'x';
private static final char EMPTY = '.';
private static final char MINE = '*';
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
char[][] map = new char[n][n];
for(int i = 0 ; i < n ; i++){
String commmand = br.readLine();
for(int j = 0 ; j < n ; j++){
map[i][j] = commmand.charAt(j);
}
}
char[][] click = new char[n][n];
for(int i = 0 ; i < n ; i++){
String commmand = br.readLine();
for(int j = 0 ; j < n ; j++){
click[i][j] = commmand.charAt(j);
}
}
char[][] result = cal(map,click,n);
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
System.out.print(result[i][j]);
}
System.out.println();
}
}
private static final int[] DY = {-1,0,1,0,-1,1,1,-1};
private static final int[] DX = {0,1,0,-1,1,1,-1,-1};
private static char[][] cal(char[][] map, char[][] click, int n) {
char[][] result = new char[n][n];
boolean openedMine = false;
for(int i = 0 ; i < n ; i++){
Arrays.fill(result[i],EMPTY);
for(int j = 0 ; j < n ; j++){
if(click[i][j] == OPEN && map[i][j] == MINE){
openedMine = true;
}
if(click[i][j] == OPEN){
int cnt = 0;
for(int k = 0 ; k < 8 ; k++){
int ny = i + DY[k];
int nx = j + DX[k];
if(nx >= 0 && nx < n && ny >= 0 && ny < n && map[ny][nx] == MINE){
cnt++;
}
}
result[i][j] = (char)(cnt + '0');
}
}
}
if(!openedMine){
return result;
}
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
if(map[i][j] == MINE){
result[i][j] = MINE;
}
}
}
return result;
}
}
'알고리즘' 카테고리의 다른 글
백준 1500번 최대 곱 (JAVA) (1) | 2023.10.18 |
---|---|
백준 1343번 폴리오미노 (JAVA) (1) | 2023.10.17 |
백준 1817번 짐 챙기는 숌 (JAVA) (0) | 2023.10.16 |
프로그래머스 세 개의 구분자 (JAVA) (1) | 2023.10.14 |
프로그래머스 x 사이의 개수 (JAVA) (0) | 2023.10.13 |