📌 문제 이해
이 문제를 이해하려고 몇번을 읽었는지 모르겠다.. 정답률도 81%로 매우 높은데 왜이렇게 이해가 안됐는지.. 몇번을 읽다가 그림으로 그리니 바로 이해가 됐다! 그림판으로 그려봤다
먼저 첫번째 줄에 몇개의 종이로 가릴건지를 입력하고, 몇번 종이가 겹치면 모자이크가 되는지를 설정하는 숫자를 입력한다. 예시에서는 3 과 1을 입력했는데, 3개의 종이로 그림을 가리고, 종이가 같은 인덱스, 위치에 몇장 이하로 겹쳐지면 모자이크가 제대로 되지 않는지를 설정하는 것이다. 종이가 M 이상 겹쳐져야 완벽히 그림이 가려지는 것이다! 예시에서는 2장이상이 겹쳐져야 그림이 가려지는 것이다.
내가 그린 그림에서는 갈색부분이 두장이상 겹쳐진 부분으로, 저 부분의 칸 갯수를 결과값으로 출력 해야한다.
🎈 문제 풀이
for (int i = 0; i < N; i++) { cin >> x1 >> y1 >> x2 >> y2; for (int x = x1; x <= x2; x++) { for (int y = y1; y <= y2; y++) arr[x][y]++; // 입력된 좌표에 해당하는 인덱스에 모두 1씩 추가하기 } }
N번만큼 좌표를 입력하도록 하고, 그 좌표 범위에 해당하는 인덱스에 1씩추가하여 나중에 M을 기준으로 판단하도록 설정한다.
for (int i = 1; i <= 100; i++) { for (int j = 1; j <= 100; j++) { if (arr[i][j] > M) // 입력한 M보다 크면 모자이크가 되었다는 뜻 sum++; } } cout << sum;
arr에 입력된 카운팅을 토대로 M보다 큰지를 판단하고, 만약 크다면 해당 인덱스에 모자이크가 되었다는 뜻이므로 sum에 그만큼 더해지도록하여 sum 값을 출력하면 된다.
#include <iostream>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
int x1, y1, x2, y2, sum = 0;
int arr[101][101] = { 0, };
for (int i = 0; i < N; i++) {
cin >> x1 >> y1 >> x2 >> y2;
for (int x = x1; x <= x2; x++) {
for (int y = y1; y <= y2; y++)
arr[x][y]++; // 입력된 좌표에 해당하는 인덱스에 모두 1씩 추가하기
}
}
for (int i = 1; i <= 100; i++) {
for (int j = 1; j <= 100; j++) {
if (arr[i][j] > M) // 입력한 M보다 크면 모자이크가 되었다는 뜻
sum++;
}
}
cout << sum;
}