🌞Algorithm/🔥Baekjoon

[Baekjoon] 4396_지뢰 찾기

뿌야._. 2024. 6. 28. 13:15

Silver IV

문제(출처: https://www.acmicpc.net/problem/4396)

< 지뢰 찾기 >

 

문제 풀이 

 

열린 칸마다 상, 하, 좌, 우, 4개의 대각선을 살펴보며 지뢰의 개수를 세서 출력한다. 지뢰가 있는 칸이 열렸다면 지뢰가 있는 모든 칸도 표시한다.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class _4396_ { // 지뢰 찾기

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int n = Integer.parseInt(bf.readLine());

		char[][] arr = new char[n][n];
		for (int i = 0; i < n; i++) {
			String str = bf.readLine();
			for (int j = 0; j < n; j++) {
				arr[i][j] = str.charAt(j);
			}
		}

		int result[][] = new int[n][n];
		int dx[] = { -1, 1, 0, 0, -1, -1, 1, 1 };
		int dy[] = { 0, 0, -1, 1, -1, 1, -1, 1 };
		int cnt = 0;
		boolean flag = false;

		for (int i = 0; i < n; i++) {
			String str = bf.readLine();
			for (int j = 0; j < n; j++) {
				if (str.charAt(j) == 'x') {
					if (arr[i][j] == '*') {
						flag = true;
						continue;
					}
					cnt = 0;
					for (int k = 0; k < 8; k++) {
						int x = i + dx[k];
						int y = j + dy[k];
						if (x >= 0 && x < n && y >= 0 && y < n && arr[x][y] == '*') {
							cnt += 1;
						}
					}
					result[i][j] = cnt;
				} else {
					result[i][j] = -1;
				}
			}
		}

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (flag && arr[i][j] == '*') {
					bw.write("*");
					continue;
				}
				if (result[i][j] == -1) {
					bw.write(".");
					continue;
				}
				bw.write(result[i][j] + "");
			}
			bw.write("\n");
		}
		bw.flush();
	}
}
변수)
n : 격자 크기
arr : 격자판 정보
result : 지뢰 개수 정보 저장
dx, dy : 상, 하, 좌, 우, 4개의 대각선
cnt : 지뢰 개수
flag : 지뢰가 있는 칸이 열렸는지 여부

 

격자판의 정보를 입력받아 arr에 저장한다. 열린 칸 정보를 입력받으면서 다음 과정을 실행한다.

 

1) 지뢰가 있는 칸이 열렸다면 flag를 true 표시 후 계속

2) 지뢰가 없는 칸이라면 상, 하, 좌, 우, 4개의 대각선을 살펴보며 지뢰 개수를 세어 result에 저장

3) 열린 칸이 아니라면 -1 저장

 

result에 저장된 값을 출력하면서 만약 지뢰가 있는 칸이 열렸다면 지뢰가 있는 모든 칸도 같이 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 1913_달팽이  (0) 2024.07.02
[Baekjoon] 1985_디지털 친구  (0) 2024.07.01
[Baekjoon] 4108_지뢰찾기  (0) 2024.06.27
[Baekjoon] 2615_오목  (0) 2024.06.26
[Baekjoon] 9204_체스  (0) 2024.06.25