본문 바로가기
코딩테스트

[이차원배열] 백준 2563번 색종이 자바 (JAVA)

by Enhydra lutris 2025. 5. 13.
728x90

오늘의 복습 문제로 백준 색종이 문제를 내주셔서 풀어봤습니다.

 

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

 

문제

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

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

입력

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다

출력

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

풀이

하얀 도화지를 이차원 배열로 두고 검은 도화지가 붙은 위치를 표시해준뒤 표시된 부분의 넓이를 구하면 되는 문제

 

1. 도화지 크기만큼의 이차원 배열을 boolean형으로 만들어준다.

2. 검은색 종이의 x, y 좌표를 받아 종이가 붙어있는 부분의 영역을 true로 표시 한다. 

3. 이차원 배열 전체를 돌면서 true로 표시된 개수를 구한다.

코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();

        boolean[][] paper = new boolean[100][100];

        for (int i = 0; i < N; i++) {
            int x = sc.nextInt();
            int y = sc.nextInt();

            for (int j = x; j < x + 10; j++) {
                for (int k = y; k < y + 10; k++) {
                    paper[j][k] = true;         // 색종이가 붙은 부분은 true로 표시
                }
            }
        }

        int area = 0;
        for (int i = 0; i < 100; i++) {
            for (int j = 0; j < 100; j++) {
                if (paper[i][j]) area++;
            }
        }

        System.out.println(area);
    }
}

댓글