728x90
반응형
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring> // memset 헤더
#include <string>
using namespace std;
// [백준 16935 c++ O] 배열 돌리기 3
// 문제: 주어진 배열 구현을 수행
// 접근: 배열로 직접 구현 -> 일단 성공
// 접근2: 벡터로 구현 -> 가능한데 내 코드는 범위 에러 남
// 풀이:
#define MAX 101
int n, m, r;
int a[MAX][MAX];
int b[MAX][MAX];
int main()
{
ios::sync_with_stdio(false); // 계산시간 단축 // cin,scanf 같이 쓰면 오류
cin.tie(nullptr); cout.tie(nullptr);// 입출력 시간 단축 // 이것을 쓰면 scanf,printf섞어 쓰면 안됨
cin >> n >> m >> r;
int c = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
for (int i = 0; i < r; i++) {
int op;
cin >> op;
if (op == 1) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
b[i][j] = a[n - i - 1][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = b[i][j];
}
}
}
if (op == 2) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
b[i][j] = a[i][m-j-1];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = b[i][j];
}
}
}
if (op == 3) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
b[i][j] = a[n-j-1][i];
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = b[i][j];
}
}
swap(n, m);
c++;
}
if (op == 4) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
b[i][j] = a[j][m-i-1];
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = b[i][j];
}
}
swap(n, m);
c++;
}
if (op == 5) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (i < n / 2 && j < m / 2) { // b 1번 영역
b[i][j] = a[i+n/2][j];
}
if (i < n / 2 && j >= m / 2) {// b 2번 영역
b[i][j] = a[i][j-m/2];
}
if (i >= n / 2 && j >= m / 2) {// b 3번 영역
b[i][j] = a[i-n/2][j];
}
if (i >= n / 2 && j < m / 2) {// b 4번 영역
b[i][j] = a[i][j+m/2];
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = b[i][j];
}
}
}
if (op == 6) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (i < n / 2 && j < m / 2) { // b 1번 영역
b[i][j] = a[i][j + m / 2];
}
if (i < n / 2 && j >= m / 2) {// b 2번 영역
b[i][j] = a[i + n / 2][j];
}
if (i >= n / 2 && j >= m / 2) {// b 3번 영역
b[i][j] = a[i][j - m / 2];
}
if (i >= n / 2 && j < m / 2) {// b 4번 영역
b[i][j] = a[i - n / 2][j];
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = b[i][j];
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << a[i][j] << " ";
}cout << '\n';
}
return 0;
}
|
cs |
반응형
'Algorithm_BOJ(백준) > 구현' 카테고리의 다른 글
[백준 5598 c++ O] 카이사르 암호 (0) | 2021.08.16 |
---|---|
[백준 2444 c++ O] 별 찍기 - 7 (0) | 2021.08.15 |
[백준 2443 c++ O] 별 찍기 - 6 (0) | 2021.08.15 |
[백준 2442 c++ O] 별 찍기 - 5 (0) | 2021.08.15 |
[백준 1748 c++ V] 수 이어 쓰기 1 (0) | 2021.05.11 |