[백준 BOJ] 2563번 색종이 (C++/cpp)

2022. 11. 25. 17:54PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2563번: 색종이

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변

www.acmicpc.net

백준 BOJ 2563번 색종이 문제 사진

 

접근 방법 - 배열을 이용한 기초적인 구현 문제

백준의 2563번 문제는 배열을 응용하여 연산을 수행해야 하는 기초적인 구현 문제이다.

해당 문제는, 도화지에 같은 크기의 색종이들을 덧대어 붙일 때 색종이들이 차지하는 넓이를 구하여 출력해야 하는 문제이다.

여러 가지 해결 방법이 있겠지만, 필자와 같은 경우에는 배열을 이용하였다.

색종이가 겹쳐져있든 아니든 간에, 결국 도화지 위로 색종이가 붙여져 있는 공간의 넓이를 구하는 것이다.

따라서, 도화지 크기만큼 공간이 확보된 배열에 있어 배열값이 양수인 인덱스의 개수를 카운팅하면 정답을 구할 수 있을 것이라 생각하였다.

자세한 설명은 아래에 기재해놓으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 도화지의 크기만큼 공간을 확보한 배열(white)을 전역 변수로 미리 선언해둔다.

 

2) 색종이의 개수(n)를 입력받는다.

 

3) n의 크기만큼, 반복문을 실행하여 아래의 연산을 취한다.

- 색종이가 위치한 좌표(x, y)를 입력받는다.

- 다른 이중 반복문을 선언하여, (x,y)부터 시작해 해당 색종이가 도화지를 덮어쓴 배열값에 모두 1을 더한다.

(이때 문제에서, 모든 색종이의 가로 및 세로는 각각 10이라는 조건이 명시되어있기 때문에 이를 참고하면 된다.)

 

4) 색종이가 도화지를 덮어쓴 넓이를 카운팅할 변수 cnt를 0으로 초기화하여 선언한다.

 

5) 반복문을 통해, white의 배열값들을 탐색하며 아래의 연산을 취한다.

- 만일 현재 탐색값이 양수라면, 이 공간은 색종이로 덮어 쓰인 공간이다. 따라서 이 경우엔, cnt에 1을 더하도록 한다.

 

6) 모든 연산이 끝났다면, 최종적으로 저장된 cnt의 값을 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 2563번 코드
int white[101][101];
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int x, y;
		cin >> x >> y;
		for (int a = x; a < x + 10; a++) {
			for (int b = y; b < y + 10; b++) {
				white[a][b]++;
			}
		}
	}

	int cnt = 0;
	for (int i = 0; i < 100; i++) {
		for (int j = 0; j < 100; j++) {
			if (white[i][j] > 0) {
				cnt++;
			}
		}
	}

	cout << cnt << endl;
}

 

제출 결과

백준 BOJ 2563번 색종이 문제 C++ 제출 결과

(2022.10.26 백준 2563번 문제 제출 결과)

언제 실버로 올라갔지

반응형