본문 바로가기

프로그래밍/백준

백준 2563 - 색종이 (C++)

문제

해결 과정

먼저 100x100 canvas를 생성 후 0으로 초기화한다.

사각형 개수만큼 입력을 매번 받아서 그만큼 2중 for문을 돌려 도형을 칠한다. (canvas[i][j]++)

그 직후 canvas[i][j]가 1인지 체크하여 ans를 증가시키면된다.

만약 중복되는 영역은 2 이상의 값이 나올 것이기 때문에 알아서 걸러질 것이기 때문이다.

 

코드

#include <iostream>
using namespace std;

int main() {
	int n;
	int ans=0;
	cin >> n;
	int x, y;
	int canvas[100][100] = { 0 };
	while (n > 0)
	{
		cin >> x >> y;
		for (int i = x; i < x+10; i++)
		{
			for (int j = y; j < y+10; j++) {
				canvas[i][j]++;
				if (canvas[i][j]==1)
					ans++;
			}
		}
		n--;
	}

	cout << ans;
	return 0;
}

 

삽질

문제 조건을 처음에 잘못 읽어서 사각형의 좌표인 x, y가 사각형의 중점에 위치한줄 알았으나, 다시 읽어보니 좌측하단 고정이었다.

-> 사각형의 중점으로부터 다른 사각형의 거리를 구해

ans += n * 10;
for (int i=0; i<n-1; i++) {
    ans -= abs(arr[i].x - arr[i+1].x) * abs(arr[i].y - arr[i+1].y) * 5;
}

 이 공식을 사용해서 넓이를 구하려고했는데, 주어지는 좌표 자체가 공식에 부합하지 않았으므로 당연히 틀렸다.

 

문제를 잘 읽어야겠다.

'프로그래밍 > 백준' 카테고리의 다른 글

BOJ 1002 - 터렛 (C++)  (0) 2025.08.20