-
백준 2567(색종이2) JAVA백준 문제 2023. 7. 11. 23:21728x90
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; } }
'백준 문제' 카테고리의 다른 글
백준 1260(DFS와 BFS) JAVA <그래프 구현 방법> (0) 2023.07.19 백준 12891(DNA 비밀번호) JAVA <슬라이딩 윈도우> (0) 2023.07.12 백준 2018(수들의 합 5) JAVA <투 포인터> (0) 2023.07.10 백준 17471(게리맨더링) c++ (0) 2023.03.30 백준 2110(공유기 설치) c++ (0) 2023.03.28