백준 문제
백준 2567(색종이2) JAVA
kangyuseok
2023. 7. 11. 23:21
728x90
2567번: 색종이 - 2
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변
www.acmicpc.net
100 * 100 인 공간에서 길이가 10인 정사각형 색종이 좌표가 n개 주어졌을 때
n개의 색종이의 둘레를 구하는 문제입니다.
단순히 가로와 세로의 길이만 구하면 되는 문제 같지만
왼쪽 그림과 같이 중간에 구멍 둘레도 구해야 하기 떄문에 까다로운 문제입니다.
아이디어만 생각하면 간단한 문제입니다.
100 * 100 이차원 공간에서 색종이로 덮힌 공간은 1로 채우고,
1로 채운 공간을 4방향으로 순회하면서 0인 갯수를 세어주면 둘레가 됩니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class boj_2563_색종이2 {
static int [][]arr = new int[101][101];
static int []dx = {0, 1, 0, -1};
static int []dy = {1, 0, -1, 0};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int ans=0;
//1을 만나면 주변(4방향)의 0의 개수를 세면 둘레가 된다.
for(int i=0; i<n;i++){
st = new StringTokenizer(br.readLine()," ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
for(int j = x; j<x+10;j++){
for(int k = y; k<y+10;k++){
arr[j][k]=1;
}
}
}
for(int i=1;i<=100;i++) {
for (int j = 1; j <= 100; j++) {
if (arr[i][j]==1) ans+=zeroCheck(i, j);
}
}
System.out.println(ans);
}
static int zeroCheck(int x, int y){
int zeroCnt = 0;
for(int i=0;i<4;i++){
int xx = x +dx[i];
int yy = y + dy[i];
//if(xx<1 || yy<1 || xx>100 || yy>100)continue; 여기 주석 처리하니까 됨
if(arr[xx][yy]==0)zeroCnt++;
}
return zeroCnt;
}
}