문제 번호
알고리즘 분류
문제 풀이
문제를 잘 읽고 하라는대로 하면된다.
배열을 돌렸을때 가로와 세로가 바뀌는 것에 주의한다.
정확히 중간에 위치한 값들은 뒤집는 연산을 진행해도 그대로 유지되기 때문에 'parseInt(N/2)'와 'Math.ceil(N/2)'를 적절하게 사용하여 정 가운데 위치한 값은 건드리지 않도록 하였다.
전체코드
const input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n');
let [N, M, R] = input[0].split(' ').map(Number);
let inputArr = input.slice(1, N + 1).map(_ => _.trim().split(' ').map(Number));
const C = input[1 + N].split(' ').map(Number);
function main() {
let ans = inputArr;
for(let i=0; i<C.length; i++) {
ans = sol(C[i],ans);
}
print(ans);
}
function sol(command, ans) {
let ret = ans;
switch (command) {
case 1:
ret = one(ret);
break;
case 2:
ret = two(ret);
break;
case 3:
ret = three(ret);
break;
case 4:
ret = four(ret);
break;
case 5:
ret = five(ret);
break;
case 6:
ret = six(ret);
break;
}
return ret;
}
function print(arr) {
let answer = ''
for (let i = 0; i < arr.length; i++) {
answer += arr[i].join(' ') + '\n';
}
console.log(answer.trim());
}
function one(arr) {
arr = arr.reverse();
return arr;
}
function two(arr) {
for (let i = 0; i < arr.length; i++) {
arr[i] = arr[i].reverse();
}
return arr;
}
function three(arr) {
N = arr.length;
M = arr[0].length;
let temp = new Array(M).fill(null).map(_ => new Array(N).fill(0));
for (let i = 0; i < N; i++) {
for (let j = 0; j < M; j++) {
temp[j][N - (i + 1)] = arr[i][j];
}
}
return temp;
}
function four(arr) {
N = arr.length;
M = arr[0].length;
let temp = new Array(M).fill(null).map(_ => new Array(N).fill(0));
for (let i = 0; i < N; i++) {
for (let j = 0; j < M; j++) {
temp[M - (j + 1)][i] = arr[i][j];
}
}
return temp;
}
function five(arr) { // 시계 돌리기.
N = arr.length;
M = arr[0].length;
let temp = new Array(N).fill(null).map(_ => new Array(M).fill(0));
for (let i = 0; i < N; i++) {
for (let j = 0; j < M; j++) {
temp[i][j] = arr[i][j];
}
}
// 1 -> 2.
for (let i = 0; i < parseInt(N / 2); i++) {
for (let j = 0; j < parseInt(M / 2); j++) {
temp[i][j + Math.ceil(M / 2)] = arr[i][j];
}
}
// 2 -> 3.
for (let i = 0; i < parseInt(N / 2); i++) {
for (let j = Math.ceil(M / 2); j < M; j++) {
temp[i + Math.ceil(N / 2)][j] = arr[i][j];
}
}
// 3 -> 4.
for (let i = Math.ceil(N / 2); i < N; i++) {
for (let j = Math.ceil(M / 2); j < M; j++) {
temp[i][j - Math.ceil(M / 2)] = arr[i][j];
}
}
// 4 -> 1.
for (let i = Math.ceil(N / 2); i < N; i++) {
for (let j = 0; j < Math.ceil(M / 2); j++) {
temp[i - Math.ceil(N / 2)][j] = arr[i][j];
}
}
return temp;
}
function six(arr) { //반 시계 돌리기.
N = arr.length;
M = arr[0].length;
let temp = new Array(N).fill(null).map(_ => new Array(M).fill(0));
for (let i = 0; i < N; i++) {
for (let j = 0; j < M; j++) {
temp[i][j] = arr[i][j];
}
}
// 1-> 4.
for (let i = 0; i < Math.ceil(N / 2); i++) {
for (let j = 0; j < Math.ceil(M / 2); j++) {
temp[i + Math.ceil(N / 2)][j] = arr[i][j];
}
}
// 4->3.
for (let i = Math.ceil(N / 2); i < N; i++) {
for (let j = 0; j < Math.ceil(M / 2); j++) {
temp[i][j + Math.ceil(M / 2)] = arr[i][j];
}
}
// 3->2;
for (let i = Math.ceil(N / 2); i < N; i++) {
for (let j = Math.ceil(M / 2); j < M; j++) {
temp[i - Math.ceil(N / 2)][j] = arr[i][j];
}
}
// 2->1
for (let i = 0; i < Math.ceil(N / 2); i++) {
for (let j = Math.ceil(M / 2); j < M; j++) {
temp[i][j - Math.ceil(M / 2)] = arr[i][j];
}
}
return temp;
}
main();
특이사항
긴 구현문제를 풀때는 항상 침착하게 풀자.
'Algorithm > BaeKJoon' 카테고리의 다른 글
[JS][백준]14627_파닭파닭 (0) | 2022.06.09 |
---|---|
[JS][백준]7682_틱택토 (0) | 2022.06.08 |
[JS][백준]14699_관악산 등산 (0) | 2022.06.02 |
[JS][백준]17352_여러분의 다리가 되어 드리겠습니다! (0) | 2022.05.26 |
[JS][백준]14600_샤워실 바닥 깔기 (Small) (0) | 2022.05.25 |