1이 접하고 있는 0의 개수
라고 생각할 수 있습니다. 하지만 이 로직은 도화지의 끝면에 붙여진 상황을 고려하지 못합니다.(0이 없기 때문에)package simple_test;
import java.util.*;
public class testtt {
static int[][] board = new int[100][100];
static final int[] dx = {1,0,-1,0};
static final int[] dy = {0,1,0,-1};
static int answer;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = Integer.parseInt(sc.nextLine());
for (int i = 0; i < N; i++) {
StringTokenizer st= new StringTokenizer(sc.nextLine()," ");
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
//색종이가 붙여진 곳은 1로 채우기
for (int j = r; j < r+10; j++) {
for (int j2 = c; j2 < c+10; j2++) {
board[j][j2] = 1;
}
}
}
//둘레 검사
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
round_check(i,j);
}
}
System.out.println(answer);
}
public static void round_check(int x, int y) {
//해당 칸이 0인 경우는 필요 없습니다.
if(board[x][y] == 0)return;
for (int i = 0; i < 4; i++) {
//해당 칸이 1이고, 자기 옆이 0이라면 둘레에 포함됩니다.
if(0<=x+dx[i] && x+dx[i]<100 && 0<=y+dy[i] && y+dy[i]<100 && board[x+dx[i]][y+dy[i]] == 0) {
answer++;
}
//왼쪽면에 밀착한 경우
if(0>x+dx[i]) {
answer++;
}
//아래에 밀착한 경우
if(0>y+dy[i]) {
answer++;
}
//오른쪽에 밀착한 경우
if(100<=x+dx[i]) {
answer++;
}
//왼쪽에 밀착한 경우
if(100<=y+dy[i]) {
answer++;
}
}
}
}