⌨️CS-PS/백준_수학&구현

[Baekjoon/백준][2563][C/C++] 색종이

미르의 블로그 2023. 1. 20. 01:20
728x90
반응형
『목차』
0. 개요

1. 문제
2. 풀이
3. 코드

0. 개요

2차원 배열을 이용하면 쉽게 풀리지만, 좌표평면을 이용하면 상당히 어려워지는 문제이다. 처음에 좌표평면으로 풀려다가 이 문제가 '2차원 배열 - 단계별로 풀어보기' 에 속한 문제라는 것을 깨닫고, 다시 2차원 배열로 풀기 시작했다.

1. 문제

https://www.acmicpc.net/problem/2563

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

2. 풀이

100 X 100 짜리 배열을 만든 후, 배열의 값을 모두 0 = FALSE로 초기화 한다. 이때,

■ = True = 색칠됨 = 검은 색종이 O

□ = False = 색칠안됨 = 검은 색종이 X

라고 생각하고 배열을 하나 둘씩 칠해가면서 문제를 풀면, 쉽게 풀린다. 

 

예제 1을 그림으로 나타내면 다음과 같다.

Baekjoon/백준 2563 색종이
Baekjoon/백준 2563 색종이

3. 코드

#pragma warning(disable:4996)
#include <stdio.h>
#include <stdbool.h>

int main(int argc, char* argv[]) {
	/* 도화지 : false=0으로 초기화 */
	bool canvas[100][100] = {};

	/* 입력_색종이 수=N */
	int N; scanf("%d", &N);

	for (int i = 0; i < N; i++) {
		/* 입력_행열 좌표 */
		int row, col;
		scanf("%d %d", &row, &col);

		/* 색칠하기 */
		for (int j = col; j < col + 10; j++)
			for (int k = row; k < row + 10; k++)
				canvas[j][k] = true;
	}

	/* 출력 */
	int count = 0;

	for (int i = 0; i < 100; i++)
		for (int j = 0; j < 100; j++)
			if (canvas[i][j] == true) count++;

	printf("%d", count);

	/*
	//debug 
	printf("\n");
	for (int i = 0; i < 100; i++) {
		for (int j = 0; j < 100; j++)
			printf("%d", canvas[i][j]);
		printf("\n");
	}
	*/
		
	/* 마무리 */
	return 0;
}
728x90
반응형