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

 

이번에 볼 문제는 백준 3023번 문제인 마술사 이민혁이다.
문제는 아래 링크를 확인하자.

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

 

3023번: 마술사 이민혁

첫째 줄에 왼쪽 위 부분의 행의 개수 R과 열의 개수 C가 주어진다. (1 ≤ R, C ≤ 50) 다음 R개 줄에는 C개의 문자 '.' 또는 '#'가 주어진다. 마지막 줄에는 에러의 위치 A와 B가 주어진다. (1 ≤ A ≤ 2R, 1

www.acmicpc.net

먼저 주어지는 문자열을 받아 원형과 뒤집은 문자열을 합한 것을 각 행으로 기록하고, 상하대칭 위치에 있는 행에도 같은 문자열을 기록하자.

 

algorithm헤더의 reverse 함수를 이용하면 쉽게 문자열을 뒤집을 수 있어 구현이 편리해진다.

 

모든 문자열을 기록한 다음, '.'과 '#'을 바꿔야하는 한 칸의 글자를 바꿔주자.

 

위 과정으로 얻은 2R행 문자열들을 순서대로 출력해주면 문제를 해결할 수 있다.

 

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

#include <iostream>
#include <algorithm>
using namespace std;

string s[100];

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

	int R, C; cin >> R >> C;
	for (int r = 0; r < R; r++) {
		string tmp; cin >> tmp;
		s[r] += tmp;
		reverse(tmp.begin(),tmp.end());
		s[r] += tmp;
		s[2 * R - 1 - r] = s[r];
	}

	int rr, cc; cin >> rr >> cc;
	char& err = s[rr - 1][cc - 1];
	if (err == '#') err = '.';
	else err = '#';

	for (int r = 0; r < 2 * R; r++) cout << s[r] << '\n';
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 14935 // C++] FA  (0) 2022.05.15
[BOJ 5558 // C++] チーズ (Cheese)  (0) 2022.05.15
[BOJ 6030 // C++] Scavenger Hunt  (0) 2022.05.15
[BOJ 24783 // C++] Number Fun  (0) 2022.05.15
[BOJ 24883 // C++] 자동완성  (0) 2022.05.15

+ Recent posts