본문 바로가기
Baekjoon

[백준] 2563번 색종이 (Java)

by Chaewon Park 2024. 2. 12.

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

 

2563번: 색종이

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

www.acmicpc.net

 


문제

 


알고리즘

 

처음에는 정말 수학적으로 생각해서 풀었었는데 수학적으로 접근하고자 하면 .. 복잡해서 틀릴 확률이 높아진다.

 

1. Boolean 2차 배열을 생성한다.

static boolean arr [][] = new boolean[101][101];

 

2. 색종이의 개수를 입력 받고 각 색종이의 x와 y값을 저장한다.

int num = Integer.parseInt(br.readLine());

for(int i=0; i<num; i++){
    StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    int x = Integer.parseInt(st.nextToken());
    int y = Integer.parseInt(st.nextToken());
    
    // makeSquare함수 설명 예정
}

 

3. x와 y값을 인자로 넘겨주면 색종이의 위치를 true로 바꿔주는 함수(makeSquare)를 만든다.

public static void makeSquare(int x, int y) {
    int dx = x + 10;
    int dy = y + 10;

    for(int i=x; i<dx ; i++) {
        for(int j=y; j<dy; j++) {
            arr[i][j] = true;
        }
    }
}

 

4. true의 개수를 세서 면적을 계산한다.

int cnt = 0;
for(int i=0; i<101; i++) {
    for(int j=0; j<101; j++) {
        if(arr[i][j]) {
            cnt++;
        }
    }
}

 


풀이
import java.util.*;
import java.io.*;

public class Main {

    static boolean arr [][] = new boolean[101][101];

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));


        int num = Integer.parseInt(br.readLine());

        for(int i=0; i<num; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            makeSquare(x, y);
        }

        int cnt = 0;
        for(int i=0; i<101; i++) {
            for(int j=0; j<101; j++) {
                if(arr[i][j]) {
                    cnt++;
                }
            }
        }

        br.close();

        bw.write(Integer.toString(cnt));
        bw.flush();
        bw.close();
    }

    public static void makeSquare(int x, int y) {
        int dx = x + 10;
        int dy = y + 10;

        for(int i=x; i<dx ; i++) {
            for(int j=y; j<dy; j++) {
                arr[i][j] = true;
            }
        }
    }
}