문제 : boj4108
무지성 구현문제이다. RxC 배열의 모든 칸을 보면서 '*'을 만날 시 그 주변 8개의 칸에 대해 카운트를 시켜주면 된다. 주의점은 '*'이었던 위치는 특별한 값으로 표시를 해주면 좋다(이하 코드에선 -1로 했음). 시간복잡도는 O(8RC) 이다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.stream.Stream;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
while (true) {
st = new StringTokenizer(br.readLine());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
if (r*c==0) break;
int[][] arr = new int[r][c];
for (int i = 0; i < r; i++) {
String row = br.readLine();
for (int j = 0; j < c; j++) {
if (row.charAt(j) == '.') continue;
arr[i][j]=-1;
for (int a = i-1; a <= i+1; a++) {
for (int b = j-1; b <= j+1; b++) {
if (a<0||a>=r||b<0||b>=c||arr[a][b]==-1) continue;
arr[a][b]++;
}
}
}
}
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (arr[i][j]==-1) sb.append('*');
else sb.append(arr[i][j]);
}
sb.append('\n');
}
}
System.out.print(sb);
}
public static void main(String[] args) throws Exception{
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 24445 - 알고리즘 수업 - 너비 우선 탐색 2 (boj java) (0) | 2022.06.04 |
---|---|
[자바] 백준 24444 - 알고리즘 수업 - 너비 우선 탐색 1 (boj java) (0) | 2022.06.03 |
[자바, 파이썬] 백준 13706 - 제곱근 (boj java) (0) | 2022.06.01 |
[자바] 백준 21941 - 문자열 제거 (boj java) (0) | 2022.05.31 |
[자바] 백준 6318 - Box of Bricks (boj java) (0) | 2022.05.31 |
댓글