백준의 지영 공주님의 마법 거울(11586) 문제이다.

[ 문제 바로가기 ]


[ 문제풀이 ]

1) 단순히, 입력의 명령에 맞게 주어진 입력배열을 상하로 반전 혹은 좌우로 반전시켜서 출력시키면 되는 문제였다.

   본인은 이 문제에서 '상하반전' 시키는 부분만 구현을 하였다.

   애초에 맵을 입력받을 때, 입력되는 행과 열을 반대로 입력받는 또 하나의 맵을 만들었다.

   그래서, 만약 좌우로 반전을 시켜야 하면, 이는 곧 행과 열이 뒤집어져 있는 또 다른 맵을 상하반전 시킨 결과와 같으므로

   또 다른 맵을 상하반전을 시켜 주었다.

  

   예를 들어서 위와 같은 형태의 맵이 입력에 맞게 입력되는 맵이라면, 행과 열을 반대로 뒤집은 맵은 다음과 같다.

  

   즉, 원래의 맵을 "좌우반전 시켜라 !" 라고 한다면, 행과 열을 반대로 뒤집은 맵을 상하반전을 시키면 된다.

   사실 이렇게 구현한 특별한 이유 같은건 없다...


[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include<iostream>
#include<string>
 
#define endl "\n"
#define MAX 100
using namespace std;
 
int N, State;
char MAP[MAX][MAX], R_MAP[MAX][MAX];
 
 
void Input()
{
    cin >> N;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cin >> MAP[i][j];
            R_MAP[j][i] = MAP[i][j];
        }
    }
    cin >> State;
}
 
void Print(char A[][MAX])
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << A[i][j];
        }
        cout << endl;
    }
}
 
void Reverse_Mirror(char A[][MAX])
{
    int Half = N / 2;
    for (int i = 0; i < Half; i++) swap(A[i], A[N - i - 1]);
}
 
void Copy_MAP()
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            MAP[i][j] = R_MAP[j][i];
        }
    }
}
 
void Solution()
{
    if (State == 1)
    {
        Print(MAP);
        return;
    }
 
    if (State == 2)
    {
        Reverse_Mirror(R_MAP);
        Copy_MAP();
        Print(MAP);
        return;
    }
 
    Reverse_Mirror(MAP);
    Print(MAP);
}
 
void Solve()
{
    Input();
    Solution();
}
 
int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    //freopen("Input.txt", "r", stdin);
    Solve();
 
    return 0;
}
cs


+ Recent posts