Algorithm/Baekjoon(Java)

[백준/JAVA] 2563 : 색종이 (2차원 배열)

비망노트 2022. 12. 6. 13:37
문제

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다.

이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다.

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

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.

 

입력

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다.

색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고,

두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다.

색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다.

 

출력

첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.

 

예제입력 예제출력
3
3 7
15 7
5 2
260

 

⭕ 풀이

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int tc = Integer.parseInt(br.readLine());
        
        boolean[][] board = new boolean[100][100];
        int cnt = 0;
        while(tc-->0){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int row = Integer.parseInt(st.nextToken());
            int col = Integer.parseInt(st.nextToken());
            
            for(int i=row;i<row+10;i++){
                for(int j=col;j<col+10;j++){
                    if(!board[i][j]) {
                        board[i][j] = true;
                        cnt++;
                    }
                }
            }
        }
        br.close();
        System.out.print(cnt);
    }
}

 

✅ 풀이 흐름

1. 이번문제 역시 마찬가지로 고정크기이기때문에 100*100 크기의 2차원 배열을 선언한다

1-1. ❗) Boolean과 boolean의 차이는 기본형타입와, 참조형타입이라는 점인데

            Boolean은 null을 가질수있고 boolean은 null이 없이 false,true 두개의 값만 가질 수 있다.

 

2. 2차원배열을 시작하며 색종이의 시작점으로부터 +10칸까지의 정사각형크기에 해당하는 인덱스위치를 true로 바꾼다.

 

3. 주어진 색종이의 갯수만큼 반복하는데 이미 true로 칠해진 자리는 다시 반복할필요가 없으므로 if(!board[i][j]) 의 조건을 넣는다

3-1. 이렇게 if문을 추가해 진행하면 true로 칠하는 과정과 cnt++ 를 하는 과정을 따로 나눌필요가없다.

      +) 처음에 true로 칠하고 그다음에 다시 반복문을 열어 cnt갯수를 세도록 작성했다가 수정했다.

 

4. 이렇게 모든 색종이의 갯수만큼 반복이 끝났으면 지금까지 센 cnt를 출력한다.

 

 

 

 

-출처

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