※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |