⌨️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을 그림으로 나타내면 다음과 같다.

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
반응형