2016.03.10 모임 50
이제부터 모임은 목요일에 합니다.
- 활동 일시: 03월 10일 (목) 18:32 - 20:20
- 모임 장소: 강남 R&D 캠퍼스 1층 회의실
- 활동 주제: 쉬어가는 문제
문제 링크
코드
좌표를 pair<int, int>
로 표현해서 만든 코드입니다.
버그가 있는 상태 그대로 올립니다.
누가 수정해 주세요 ㅠ
#include <iostream>
#include <vector>
using namespace std;
int row, col, R;
int in[300][300];
int result[300][300];
void input() {
cin >> row >> col >> R;
for (int r = 0; r < row; r++)
for (int c = 0; c < col; c++)
cin >> in[r][c];
}
void rotate(int rbegin, int rend, int cbegin, int cend) {
vector<pair<int,int>> v;
for (int c = cbegin; c <= cend; c++) {
v.push_back(make_pair(rbegin, c));
}
// rbegin, cend
for (int r = rbegin+1; r <= rend; r++) {
v.push_back(make_pair(r, cend));
}
for (int c = cend-1; cbegin <= c; c--) {
v.push_back(make_pair(rend, c));
}
for (int r = rend-1; rbegin <= r+1; r--) {
v.push_back(make_pair(r, cbegin));
}
vector<pair<int,int>> out(v.size());
int size = v.size();
for (int i = 0; i < size; i++) {
out[i] = v[(i+R)%size];
}
/////////////////////////////////////////////////
int index = 0;
for (int c = cbegin; c <= cend; c++, index++) {
auto &p = out[index];
int &rr = p.first;
int &cc = p.second;
result[rbegin][c] = in[rr][cc];
}
// rbegin, cend
for (int r = rbegin+1; r <= rend; r++, index++) {
auto &p = out[index];
int &rr = p.first;
int &cc = p.second;
result[r][cend] = in[rr][cc];
}
for (int c = cend-1; cbegin <= c; c--, index++) {
auto &p = out[index];
int &rr = p.first;
int &cc = p.second;
result[rend][c] = in[rr][cc];
}
for (int r = rend-1; rbegin <= r+1; r--, index++) {
auto &p = out[index];
int &rr = p.first;
int &cc = p.second;
result[r][cbegin] = in[rr][cc];
}
}
void solve() {
int rbegin(0), rend(row-1), cbegin(0), cend(col-1);
while (rbegin < rend && cbegin < cend) {
rotate(rbegin, rend, cbegin, cend);
rbegin++; cbegin++;
rend--; cend--;
}
for (int r = 0; r < row; r++) {
for (int c = 0; c < col; c++) {
cout << result[r][c] << " ";
}
cout << endl;
}
}
int main() {
input();
solve();
return 0;
}
아래는 두 번째로 다시 작성한 코드입니다.
#include <iostream>
#include <vector>
using namespace std;
int row, col, R;
int in[300 *300];
int result[300 *300];
void input() {
cin >> row >> col >> R;
for (int r = 0; r < row; r++)
for (int c = 0; c < col; c++)
cin >> in[r*col + c];
}
void rotate(int rbegin, int rend, int cbegin, int cend) {
vector<int> v;
int index = rbegin*col + cbegin - 1;
for (int c = cbegin; c <= cend; c++) {
index++;
v.push_back(index);
}
for (int r = rbegin+1; r <= rend; r++) {
index += col;
v.push_back(index);
}
for (int c = cend-1; cbegin <= c; c--) {
index--;
v.push_back(index);
}
for (int r = rend-1; rbegin+1 <= r; r--) {
index -= col;
v.push_back(index);
}
int size = v.size();
for (int i = 0; i < size; i++) {
int aaa = v[(i+R) % size];
int target = v[i];
// target <--- aaa
result[target] = in[aaa];
}
}
void solve() {
int rbegin(0), rend(row-1), cbegin(0), cend(col-1);
while (rbegin < rend && cbegin < cend) {
rotate(rbegin, rend, cbegin, cend);
rbegin++; cbegin++;
rend--; cend--;
}
int index = 0;
for (int r = 0; r < row; r++) {
for (int c = 0; c < col; c++) {
cout << result[index++] << " ";
}
cout << endl;
}
}
int main() {
input();
solve();
return 0;
}
사진
Written on February 19, 2016