Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

히콩쓰 개발 일지

[CT_Java] 백준 2563_색종이 본문

카테고리 없음

[CT_Java] 백준 2563_색종이

용히콩 2023. 12. 13. 23:14

백준의 Silver5_2563_색종이 문제를 풀었다.

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


처음에는 수학적 사고로 접근했다.
x축끼리 뺐을 때, y축끼리 뺐을 때 등 다양한 상황을 고려해야 해서 구현에 실패했다.

하지만, 넓이를 구하는 문제는 그렇게 하지 않아도 된다는 "준영" 님의 피드백을 받았다.
이 문제는, 2차원 배열을 선언해서 한 칸씩 칠해가는 방식으로 접근하면 된다고 말씀해주셨다.

그래서, 흰색 도화지가 100 * 100 이므로 101씩 boolean 타입으로 선언해주고, 이는 기본값이 False이니 x, y 좌표에 해당하는 index를 true로 표시하고 칸당 넓이 1로 계산하여 sum을 더해주었다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        boolean arr[][] = new boolean[101][101];
        int x = 0;
        int y = 0;
        int sum = 0;

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            x = Integer.parseInt(st.nextToken());
            y = Integer.parseInt(st.nextToken());
            for (int j = x; j < x + 10; j++) {
                for (int k = y; k < y + 10; k++) {
                    if (!arr[j][k]) {
                        arr[j][k] = true;
                        sum++;
                    }
                }
            }
        }
        System.out.println(sum);
    }
}

접근 방법에 대해 많은 고민을 하게 되었다. 휴