🌞Algorithm/🔥Baekjoon

[Baekjoon] 4108_지뢰찾기

뿌야._. 2024. 6. 27. 19:59

Silver V

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

< 지뢰찾기 >

 

문제 풀이 

 

비어있는 칸마다 상, 하, 좌, 우, 4개의 대각선을 살펴보며 지뢰의 개수를 세서 출력한다.

 

 my solution (Java)

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

public class _4108_ { // 지뢰찾기

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

		int dx[] = { -1, 1, 0, 0, -1, -1, 1, 1 };
		int dy[] = { 0, 0, -1, 1, -1, 1, -1, 1 };

		int r, c, cnt = 0;
		while ((r = (Integer.parseInt(st.nextToken()))) != 0 && (c = (Integer.parseInt(st.nextToken()))) != 0) {
			char arr[][] = new char[r][c];

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

			for (int i = 0; i < r; i++) {
				for (int j = 0; j < c; j++) {
					cnt = 0;
					if (arr[i][j] == '*') {
						bw.write("*");
						continue;
					}
					for (int k = 0; k < 8; k++) {
						int x = i + dx[k];
						int y = j + dy[k];
						if (x >= 0 && x < r && y >= 0 && y < c && arr[x][y] == '*') {
							cnt += 1;
						}
					}
					bw.write(cnt+"");
				}
				bw.write("\n");
			}
			st = new StringTokenizer(bf.readLine());
		}
		bw.flush();
	}
}
변수)
dx, dy : 상, 하, 좌, 우, 4개의 대각선 
r, c : 행, 열
cnt : 지뢰 개수
arr : 지뢰밭 정보

 

0 0 이 입력되기 전까지 다음 과정을 반복한다.

 

1) 지뢰밭 정보 입력 

2) 지뢰밭을 순환하며 지뢰가 있는 칸은 지뢰 출력, 지뢰가 없는 칸은 상, 하, 좌, 우, 4개의 대각선을 살펴보며 지뢰 개수를 센 후 출력 



 

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

[Baekjoon] 1985_디지털 친구  (0) 2024.07.01
[Baekjoon] 4396_지뢰 찾기  (0) 2024.06.28
[Baekjoon] 2615_오목  (0) 2024.06.26
[Baekjoon] 9204_체스  (0) 2024.06.25
[Baekjoon] 1474_밑 줄  (1) 2024.06.24