Algorithm/백준

[백준] 2563 with C++

nowkoes 2023. 4. 2. 00:00

문제설명


입출력 예제


개념

 겹친 색종이를 제외한 나머지의 색종이의 넓이를 구하는 문제다. 전체 넓이에서 색종이가 차지하고 있는 곳을 빼는 방식과, 색종이가 차지하고 있는 곳의 개수를 찾으면 간단하게 해결되는 문제다.


풀이

#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보다 작은, 즉 한 칸일 때만 카운팅 되게 해 준다.

 

 직관적으로 이해되지 않는다면, 입력 예제를 직접 출력한 화면을 확인해 보면 된다.

 

ary[i][j]가 1보다 큰 부분은 겹쳐있으므로 카운팅에서 빼야 한다.


총합본

#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