- 문제설명
- 해결과정
완전탐색 문제이다.
배열의 모든 좌표를 순회하는데 현재 좌표값이 0이라면 상하좌우 + 대각선 총 8방향에서 1이 있는지 검사하고 그 개수를 저장한다.
1의 개수가 K와 같다면, 따로 결과로 내보내줄 result값을 하나 올려준다.
전형적인 완전탐색 문제이다!
- 솔루션
import java.io.*;
import java.util.*;
class Main {
private static int[] dx = {1, -1, 0, 0, 1, -1, 1, -1};
private static int[] dy = {0, 0, -1, 1, -1, -1, 1, 1};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
/*
입력값 배열로 만들기
*/
int[][] board = new int[N][N];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < N; j++) {
board[i][j] = Integer.parseInt(st.nextToken());
}
}
/*
배열 전체를 순회, 값이 0이라면 주변 8개의 박스 중 1의 개수를 센다.
1의 개수가 K와 같다면 result++;
*/
int result = 0;
int temp = 0;
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
temp = 0;
if(board[i][j] == 0) {
for(int k = 0; k < 8; k++) {
int nextX = j + dx[k];
int nextY = i + dy[k];
try {
if(board[nextY][nextX] == 1) {
temp++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
}
if(temp == K) result++;
}
}
}
bw.write(Integer.toString(result));
bw.flush();
bw.close();
}
}
'코딩테스트 > 구름톤 챌린지' 카테고리의 다른 글
[Java] 구름톤 챌린지 2주차 : 폭탄 구현하기 (2) (0) | 2023.08.24 |
---|---|
[Java] 구름톤 챌린지 2주차 : 통증 (0) | 2023.08.24 |
[Java] 구름톤 챌린지 2주차 : 문자열 나누기 (0) | 2023.08.22 |
[Java] 구름톤 챌린지 1주차 : 이진수 정렬 (0) | 2023.08.22 |
[Java] 구름톤 챌린지 1주차 : 완벽한 햄버거 만들기 (0) | 2023.08.17 |