BOJ

[BOJ 2563 // C++] 색종이

measurezero 2021. 3. 20. 10:00

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2563번 문제인 색종이이다.
문제는 아래 링크를 확인하자.

www.acmicpc.net/problem/2563

 

2563번: 색종이

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

www.acmicpc.net

이 문제는 100x100의 충분히 작은 범위에 10x10의 색종이를 정수 격자에 맞게 붙일 때 덮인 영역의 넓이를 구하는 문제이다.

 

정수 격자점에 대응되는 배열을 만들어도 10000개의 점밖에 되지 않기 때문에, 이 문제는 100x100 배열을 만들어 각 점에 종이가 붙여질 때마다 기록하는 방식으로 풀 수 있다.

 

예를 들어, 5행 3열이 시작점인 색종이를 붙였다면 5~14행, 3~12열에 해당하는 모든 점에 색종이가 붙었다고 기록하는 식으로 문제를 풀 수 있다.

 

답을 출력할 때는 색종이가 붙은 칸의 수를 세주면 된다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using std::cin; using std::cout;
bool paper[100][100];

int main()
{
    int N; cin >> N;
    int x, y;
    for (int _ = 0;_ < N;_++) {
        cin >> x >> y;
        for (int i = 0;i < 10;i++) {
            for (int j = 0;j < 10;j++) {
                paper[x+i][y+j] = 1;
            }
        }
    }
    int ans = 0;
    for (int i = 0;i < 100;i++) {
        for (int j = 0;j < 100;j++) {
            if (paper[i][j]) ans++;
        }
    }
    cout << ans;

    return 0;
}
728x90