안녕하세요. 오늘은 마술사가 되어볼 거예요.

문제

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

아이디어

총 2R2C개의 칸을 출력해야합니다.
그대로 출력을 한다고 하면 (x,y)는 (min(x,2
R+1-x),min(y,2*C+1-y))의 값을 그대로 가져와야합니다.
하지만 어떤 칸이 바뀌어 있으므로 그 칸만 바꿔서 출력해주면 됩니다.

소스코드

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

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    char painting[111][111] = { 0 };
    int R, C, i, j, x, y;

    cin >> R >> C;
    for (i = 1; i <= R; i++)
        for (j = 1; j <= C; j++)
            cin >> painting[i][j];

    cin >> x >> y;
    for (i = 1; i <= 2 * R; i++)
    {
        for (j = 1; j <= 2 * C; j++)
        {
            char temp = painting[min(i, 2 * R + 1 - i)][min(j, 2 * C + 1 - j)];
            if (i == x && j == y) cout << (char)('.' + '#' - temp);
            else cout << temp;
        }
        cout << "\n";
    }
}


감사합니다.

0개의 댓글