티스토리 뷰

https://www.acmicpc.net/problem/17406

 

17406번: 배열 돌리기 4

크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의

www.acmicpc.net

구현, 완전탐색(순열)

 

const fs = require('fs');
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n").map(v => v.split(' ').map(Number));
const [N, M, K] = input.shift();
const calc = [];
for (let i = 0; i < K; i++) {
  calc.unshift(input.pop())
}
const permutation = [];
let calcQ = [[]];
while (calcQ.length > 0) {
  const arr = calcQ.shift();
  if (arr.length == K) {
    permutation.push(arr)
  } else {
    for (let i = 0; i < K; i++) {
      if (!arr.includes(i)) {
        calcQ.push([...arr, i]);
      }
    }
  }
}

const rotateArray = (arr, r, c, s) => {
  let sx = r - s - 1;
  let sy = c - s - 1;
  let ex = r + s - 1;
  let ey = c + s - 1;
  while (sx < ex) {
    const temp1 = arr[sx][ey]
    for (let i = ey - 1; i >= sy; i--) {
      arr[sx][i + 1] = arr[sx][i]
    }
    const temp2 = arr[ex][ey];
    for (let i = ex - 1; i > sx; i--) {
      arr[i + 1][ey] = arr[i][ey]
    }
    arr[sx + 1][ey] = temp1;

    const temp3 = arr[ex][sy];
    for (let i = sy + 1; i <= ey; i++) {
      arr[ex][i - 1] = arr[ex][i];
    }
    arr[ex][ey - 1] = temp2;

    for (let i = sx + 1; i <= ex; i++) {
      arr[i - 1][sy] = arr[i][sy];
    }
    arr[ex - 1][sy] = temp3;
    sx++;
    ex--;
    sy++;
    ey--;
  }
  return arr;
}


const check = (board) => {
  let min = Infinity;
  for (let i = 0; i < N; i++) {
    const temp = board[i].reduce((r, v) => { return r + v }, 0);
    if (temp < min) min = temp;
  }
  return min;
}

let answer = Infinity;



permutation.forEach(order => {
  let arr = [];
  input.map(v => arr.push([...v]))
  order.forEach(x => {
    const [r, c, s] = calc[x]
    arr = rotateArray(arr, r, c, s);
  })
  const temp = check(arr);
  if (temp < answer) answer = temp;
})

console.log(answer)
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함