※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 24931번 문제인 Patchwork이다.
문제는 아래 링크를 확인하자.

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

 

24931번: Patchwork

Adam’s grandmother has a birthday coming up and he wants to make her a beautiful patchwork quilt as a present. He has created a collection of patch designs that he will sew onto the quilt. However, he is having trouble deciding exactly where to place his

www.acmicpc.net

문제에서 주어지는 patch type들을 모두 저장해두고, patch 작업을 순서대로 시뮬레이션하는 문제이다.

 

각 patch type은 번호와 여러 행의 문자열로 표현이 가능하므로, 글쓴이는 각 patch type을 2차원 문자열배열 patchtype[i][r]을 이용하여 저장하였다. 여기서 i는 각 patch type의 번호이고 r은 각 patch type의 r번째 행을 의미한다.

 

주어진 전체 퀼트의 크기(R x C)를 벗어나는 칸은 작업을 하더라도 마지막에 잘라서 버리므로, 벗어난 영역은 직접 시뮬레이션을 해볼 필요가 없다. (또한, bound를 벗어난 index에 접근하는 런타임 에러를 일으킬 위험이 사라진다.)

 

각 작업은 이전의 작업 결과물을 덮어씌우며 진행되므로, 작업의 순서를 바꾸거나 하지 않고 순서대로 작업하도록 하자.

 

첫 번째 예제의 백슬래시의 경우 환경에 따라 원화 기호로 보일 수 있으나 문제의 정오에는 영향을 미치지 않으니 참고하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

char arr[101][101];
int patchsizeR[101];
int patchsizeC[101];
string patchtype[101][101];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int R, C; cin >> R >> C;
	for (int r = 0; r < R; r++) {
		for (int c = 0; c < C; c++) arr[r][c] = '.';
	}

	int N; cin >> N;
	for (int i = 1; i <= N; i++) {
		int RR, CC; cin >> RR >> CC;
		patchsizeR[i] = RR, patchsizeC[i] = CC;
		for (int rr = 0; rr < RR; rr++) {
			cin >> patchtype[i][rr];
		}
	}

	int Q; cin >> Q;
	while (Q--) {
		int sR, sC, p; cin >> sR >> sC >> p;
		int RR = patchsizeR[p], CC = patchsizeC[p];
		for (int rr = 0; rr < RR; rr++) {
			if (sR + rr >= R) break;
			for (int cc = 0; cc < CC; cc++) {
				if (sC + cc >= C) break;
				arr[sR + rr][sC + cc] = patchtype[p][rr][cc];
			}
		}
	}

	for (int r = 0; r < R; r++) {
		for (int c = 0; c < C; c++) cout << arr[r][c];
		cout << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24867 // C++] Два станка  (0) 2022.05.01
[BOJ 1065 // C++] 한수  (0) 2022.05.01
[BOJ 24935 // C++] Travelling Caterpillar  (0) 2022.05.01
[BOJ 25083 // C++] 새싹  (0) 2022.05.01
[BOJ 24302 // C++] КУРИЕРИ  (0) 2022.05.01

+ Recent posts