티스토리 뷰

 

 

메모리초과: 답은 맞는 것 같아서, 이걸 이용해서 아래 규칙을 찾음

const fs = require("fs");
const [N, M] = fs
  .readFileSync("./dev/stdin")
  .toString()
  .trim()
  .split(" ")
  .map(Number);

const board = Array.from(Array(N), () => Array(M).fill(0));
let x = 0;
let y = 0;
let curve = 0;
const dx = [0, 1, 0, -1];
const dy = [1, 0, -1, 0];
let dir = 0;

while (true) {
  board[x][y] = 1;

  let cnt = 0;
  for (let i = 0; i < 4; i++) {
    const tempx = x + dx[i];
    const tempy = y + dy[i];
    if (
      tempx < 0 ||
      tempy < 0 ||
      tempx >= N ||
      tempy >= M ||
      board[tempx][tempy] == 1
    ) {
      cnt++;
    }
  }
  if (cnt == 4) {
    break;
  }

  const nx = x + dx[dir];
  const ny = y + dy[dir];

  if (nx < 0 || ny < 0 || nx >= N || ny >= M || board[nx][ny] == 1) {
    curve++;
    dir = (dir + 1) % 4;
    continue;
  }

  x = nx;
  y = ny;
}

console.log(curve);
console.log(x + 1, y + 1);

 

 

 

const fs = require("fs");
let [N, M] = fs
  .readFileSync("./dev/stdin")
  .toString()
  .trim()
  .split(" ")
  .map(Number);

let x = 1;
let y = 1;
let curve = 0;

const min = Math.min(M,N); 

    const temp = Math.floor(min/2); 
    N -= 2 * temp;
    M -= 2 * temp;
    x +=temp;
    y +=temp;
    curve += 4*temp

    // console.log(N,M)
    // console.log(curve);
    // console.log(x,y);

if(N==0){
    console.log(curve-2);
    console.log(x,y-1);

}else if(M==0){
    console.log(curve-1);
    console.log(x,y-1);
}else if(M==1 && N==1){
    console.log(curve);
    console.log(x,y)
}else if(N==1){
    console.log(curve);
    console.log(x,y+M-1)
}else if(M==1){
    console.log(curve+1);
    console.log(x+N-1,y)

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