Computer Science/Algorithm Problem
백준] 3023 - 마술사 이민혁(COCI 2006/2007)
TwinParadox
2018. 5. 27. 23:50
728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
첫째 줄에 왼쪽 위 부분의 행의 개수 R과 열의 개수 C가 주어진다. (1 ≤ R, C ≤ 50)
다음 R개 줄에는 C개의 문자 '.' 또는 '#'가 주어진다.
마지막 줄에는 에러의 위치 A와 B가 주어진다. (1 ≤ A ≤ 2R, 1 ≤ B ≤ 2C)
출력
카드 뒷 면 전체 디자인을 총 2R개 줄에 걸쳐서 출력한다. 각 줄은 2C개의 문자로 이루어져 있어야 한다.
소스코드
#include <iostream> #include <string> #include <algorithm> using namespace std; int main(void) { int r, c, a, b; string parts[50]; string card[100]; cin >> r >> c; for (int i = 0; i < r; i++) cin >> parts[i]; cin >> a >> b; for (int i = 0; i < r; i++) { string tmp = parts[i]; reverse(tmp.begin(), tmp.end()); card[i] = parts[i] + tmp; } for (int i = 0; i < r; i++) card[r * 2 - 1 - i] = card[i]; if (card[a - 1][b - 1] == '#') card[a - 1][b - 1] = '.'; else card[a - 1][b - 1] = '#'; for (int i = 0; i < r * 2; i++) cout << card[i] << '\n'; }
Tip
단순 구현문제다. algorithm의 reverse를 이용하면 대칭 구현하기가 더 쉽다.
728x90