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
728x90