Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- domain driven develop
- 백준
- MongoDB Realm
- 정렬
- 백준 12761번
- go
- 자바 디자인 패턴
- 자바 디자인패턴
- 자바
- 백준 파이썬
- http 완벽가이드
- flask
- http 개념
- 백준 12761
- ddd
- 몽고디비 렘
- golang
- 파이썬
- 백준 사이트
- golang struct
- 12761 돌다리
- 도메인 주도 개발
- String 함수
- 하둡
- 우분투
- 도메인 주도 개발 시작하기
- 12761번 돌다리
- hadoop
- 고 배열
- 트리 순회
Archives
- Today
- Total
개발바닥
BOJ_16935 [ 배열 돌리기 3 ] 본문
반응형
문제
https://www.acmicpc.net/problem/16935
16935번: 배열 돌리기 3
크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → 7 4 6 2 3 1 7 4 6 2 3 1 → 1 8 3 4 2 9 9 2 3 6 1 5 → 7 2 6 9 8 2 4 2 9 3 1 8 → 1 6 2 9 8 4 <배열> <연산 결과> 2번 연
www.acmicpc.net
문제 해결 방법
주어진 조건대로 구현하면 된다.
오른쪽 90도 회전 tmp[i][j] = board[h-1-j][i]
왼쪽 90도 회전 tmp[i][j] = board[j][w-1-i]
소스 코드 보기
#include<iostream>
#include<vector>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define MAX 102
int N, M, R;
int board[MAX][MAX];
int tmp_board[MAX][MAX];
int n_len, m_len;
void print() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cout << board[i][j] << ' ';
}cout << '\n';
}
}
void oneCmd() {
int half = (N / 2);
for (int i = 0; i < (N / 2); i++) {
for (int j = 0; j < M; j++) {
int tmp = board[i][j];
board[i][j] = board[(N-1) - i][j];
board[(N - 1) - i][j] = tmp;
}
}
}
void twoCmd() {
int half = (M / 2);
for (int j = 0; j < half; j++) {
for (int i = 0; i < N; i++) {
int tmp = board[i][j];
board[i][j] = board[i][(M - 1) - j];
board[i][(M - 1) - j] = tmp;
}
}
}
void threeCmd() {
memset(tmp_board, 0, sizeof(tmp_board));
int h = N;
swap(N, M);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
tmp_board[i][j] = board[h-1-j][i];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
board[i][j] = tmp_board[i][j];
}
}
}
void fourCmd() {
memset(tmp_board, 0, sizeof(tmp_board));
int w = M;
swap(N, M);
for (int i = 0; i < N; i++) {
for (int j= 0; j < M; j++) {
tmp_board[i][j] = board[j][w-1-i];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
board[i][j] = tmp_board[i][j];
}
}
}
void fiveCmd() {
memset(tmp_board, 0, sizeof(tmp_board));
int half_n = (N / 2);
int half_m = (M / 2);
//1 -> 2
for (int i = 0; i < half_n; i++) {
for (int j = 0; j < half_m; j++) {
tmp_board[i][j + half_m] = board[i][j];
}
}
//2 ->3
for (int i = 0; i < half_n; i++) {
for (int j = half_m; j < M; j++) {
tmp_board[i+half_n][j] = board[i][j];
}
}
//3->4
for (int i = half_n; i < N; i++) {
for (int j = half_m; j < M; j++) {
tmp_board[i][j - half_m] = board[i][j];
}
}
//4->1
for (int i = half_n; i < N; i++) {
for (int j = 0; j < half_m; j++) {
tmp_board[i-half_n][j] = board[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
board[i][j] = tmp_board[i][j];
}
}
}
void sixCmd() {
memset(tmp_board, 0, sizeof(tmp_board));
int half_n = (N / 2);
int half_m = (M / 2);
//1 <- 2
for (int i = 0; i < half_n; i++) {
for (int j = half_m; j < M; j++) {
tmp_board[i][j - half_m] = board[i][j];
}
}
//2 <- 3
for (int i = half_n; i < N ; i++) {
for (int j = half_m; j < M; j++) {
tmp_board[i - half_n][j] = board[i][j];
}
}
//3 <- 4
for (int i = half_n; i < N; i++) {
for (int j = 0; j < half_m; j++) {
tmp_board[i][j + half_m] = board[i][j];
}
}
//4 <- 1
for (int i = 0; i < half_n; i++) {
for (int j = 0; j < half_m; j++) {
tmp_board[i+half_n][j] = board[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
board[i][j] = tmp_board[i][j];
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> M >> R;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> board[i][j];
}
}
for (int i = 0; i < R; i++) {
int num;
cin >> num;
if (num == 1) {
oneCmd();
}
else if (num == 2) {
twoCmd();
}
else if (num == 3) {
threeCmd();
}
else if (num == 4) {
fourCmd();
}
else if (num == 5) {
fiveCmd();
}
else {
sixCmd();
}
}
print();
return 0;
}
https://github.com/jokerKwu/BOJ_Algorithm/blob/master/Simulation/boj_16935.cpp
jokerKwu/BOJ_Algorithm
Contribute to jokerKwu/BOJ_Algorithm development by creating an account on GitHub.
github.com
반응형
'[ Algorithm ] > [ BOJ ]' 카테고리의 다른 글
BOJ_10942 [ 팰린드롬? ] (1) | 2020.06.09 |
---|---|
BOJ_14442 [ 벽 부수고 이동하기 2 ] (0) | 2020.06.07 |
BOJ_17069 [ 파이프 옮기기2 ] (0) | 2020.05.07 |
BOJ_17828 [ 문자열 화폐 ] (0) | 2020.04.08 |
BOJ_18809 [ 수 찾기 ] (0) | 2020.04.08 |
Comments