코딩테스트/BOJ

[BOJ] 2567 색종이 2 - JAVA

5월._. 2022. 2. 23.
728x90

1. 문제

https://www.acmicpc.net/problem/2567

 

2567번: 색종이 - 2

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변

www.acmicpc.net

색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 둘레의 길이를 구하는 프로그램을 작성하시오.


2. 풀이

  • 가장자리를 굳이 따로 계산해주고 싶지 않아서 도화지의 크기를 넉넉하게 했다. 
  • 색종이를 입력받을 때마다 색종이가 도화지를 차지하는 만큼 1로 변경했다.
  • 문제 입력조건이 x는 왼쪽에서부터 멀어진 만큼, y는 아래에서부터 멀어진 만큼이라 y를 계산할 때 100에서 입력받은 값을 뺐다. 그리고 종이를 1로 채워나갈 때 -1씩 해가며 체크했다. (굳이 이렇게 안해도 됐을 것 같다. 어차피 둘레는 똑같은데..)
  • 한 칸 한 칸 비교해가며 1일 때는 주변에 0이 있는지 확인하고, 0일 때는 주변에 1이 있는지 확인했다. 이 때, 위에서부터 아래로, 왼쪽에서 오른쪽 방향으로 체크하기 때문에 4방향 전부 체크하지 않고 오른쪽과 아래방향만 체크했다.
  • 다음 ni와 nj가 범위 안에 있고 그 값이 현재의 paper[i][j]와 다르다면 둘레를 1 추가한다.
import java.io.*;
import java.util.*;

public class BOJ_2567_색종이2 {
   public static int[][] paper = new int[101][101];
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      int N = Integer.parseInt(in.readLine());

      for(int n=0;n<N;n++){
         StringTokenizer st = new StringTokenizer(in.readLine());
         int x = Integer.parseInt(st.nextToken());
         int y = 100-Integer.parseInt(st.nextToken());

         for(int i=0;i<10;i++) {
            for(int j=0;j<10;j++){
               paper[y-i][x+j] = 1;
            }
         }
      }
      int cnt = 0;
      int[][] deltas = {{0,1},{1,0}};//오른쪽, 아래
      for(int i=0;i<=100;i++){
         for(int j=0;j<=100;j++){

            for(int d=0;d<2;d++){
               int ni = i+deltas[d][0];
               int nj = j+deltas[d][1];

               if(ni>=0 && ni<=100 && nj>=0 && nj<=100 && paper[i][j] != paper[ni][nj]) cnt++;
            }

         }
      }

      System.out.println(cnt);
   }
}

3. 결과

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 2580 스도쿠 - JAVA  (0) 2022.02.23
[BOJ] 2178 미로탐색 - JAVA  (0) 2022.02.23
[BOJ] 1012 유기농 배추 - JAVA  (0) 2022.02.23
[BOJ] 2667 단지번호 붙이기 - JAVA  (0) 2022.02.23
[BOJ] 2108 통계학 - JAVA  (0) 2022.02.23

댓글