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

 

이번에 볼 문제는 백준 27268번 문제인 Рамки이다.
문제는 아래 링크를 확인하자.

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

 

27268번: Рамки

Первая строка содержит целые числа $h$, $w$ и $n$ --- размеры поля и число рамок ($2 \le h, w \le 80$, $1 \le n \le 26$). Следующие $n$ строк содержат по четыре целых

www.acmicpc.net

주어지는 직사각형 영역의 테두리를 'a'부터 알파벳을 차례대로 이용해 표기하는(겹치는 칸이 있다면 덮어쓴다) 문제이다. 반복문을 이용해 직사각형의 각 변을 각 문자로 채워넣어 문제를 해결하자.

 

아스키 코드상에서 소문자들은 차례대로 값이 1씩 차이나게끔 할당되어 있으므로 반복문을 이용해 사용할 문자를 차례대로 접근할 수 있다. 잘 모르겠다면 아래 구현의 19-20번째 줄을 확인해보자.

 

입력이 1-based index로 주어짐에 유의하자.

 

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

#include <iostream>
using namespace std;
typedef long long ll;

int R, C, N;
char board[80][80];

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

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

	for (int i = 0; i < N; i++) {
		char cur = 'a' + i;
		int R1, C1, R2, C2; cin >> R1 >> C1 >> R2 >> C2;
		R1--, C1--, R2--, C2--;
		for (int r = R1; r <= R2; r++) board[r][C1] = board[r][C2] = cur;
		for (int c = C1; c <= C2; c++) board[R1][c] = board[R2][c] = cur;
	}

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

+ Recent posts