문제

해결 과정
먼저 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 |
|---|