문제(출처: 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 |