문제설명
입출력 예제
개념
겹친 색종이를 제외한 나머지의 색종이의 넓이를 구하는 문제다. 전체 넓이에서 색종이가 차지하고 있는 곳을 빼는 방식과, 색종이가 차지하고 있는 곳의 개수를 찾으면 간단하게 해결되는 문제다.
풀이
#include <iostream>
int main()
{
int ary[100][100] = { 0 };
int n, result = 0;
std::cin >> n;
먼저 2차원 배열 ary를 선언해 주고, 색종이의 개수를 n으로 초기화한다. 그리고 넓이를 출력할 result 변수도 선언해 준다.
while (n--)
{
int y, x;
std::cin >> y >> x;
for (int i = y - 1; i < y + 9; i++)
{
for (int j = x - 1; j < x + 9; j++)
{
ary[i][j]++;
if (ary[i][j] < 2)
result++;
}
}
}
std::cout << result;
}
색종이를 붙일 위치를 y와 x로 초기화하고, 색종이가 길이가 10인 정사각형이므로 각각 10칸씩 자리를 차지하게 해 준다. 이때 겹쳐진 부위는 넓이를 구할 때 계산하면 안 되므로, 조건문을 이용해 ary[i][j]가 2보다 작은, 즉 한 칸일 때만 카운팅 되게 해 준다.
직관적으로 이해되지 않는다면, 입력 예제를 직접 출력한 화면을 확인해 보면 된다.
총합본
#include <iostream>
int main()
{
int ary[100][100] = { 0 };
int n, result = 0;
std::cin >> n;
while (n--)
{
int y, x;
std::cin >> y >> x;
for (int i = y - 1; i < y + 9; i++)
{
for (int j = x - 1; j < x + 9; j++)
{
ary[i][j]++;
if (ary[i][j] < 2)
result++;
}
}
}
std::cout << result;
}
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준] 1929 with C++ (0) | 2023.04.06 |
---|---|
[백준] 25206 with C++ (0) | 2023.04.05 |
[백준] 2559 with C++ (0) | 2023.02.27 |
[백준] 9375 with C++ (0) | 2023.02.24 |
[백준] 1065 with C++ (0) | 2023.02.23 |