[프로그래머스] 행렬 테두리 회전하기 (JS)

hhkim·2023년 10월 26일
0

Algorithm - JavaScript

목록 보기
167/188
post-thumbnail

풀이 과정

  1. 배열 생성
  2. 쿼리 배열에 대해 반복
  3. 배열 복사하고 규칙에 따라 원본 배열의 숫자 변경
    이때 숫자를 바꿀 때마다 min 값 저장
  4. 매 반복마다 min값을 result에 넣기

코드

function solution(rows, columns, queries) {
  const arr = Array(rows)
    .fill(0)
    .map((_, i) =>
      Array(columns)
        .fill(i * columns + 1)
        .map((e, j) => e + j)
    );
  const result = [];
  for (const query of queries) {
    const [is, js, ie, je] = query.map((e) => e - 1);
    const copied = copyArray(arr);
    let min = Infinity;
    let [i, j] = [is, js];
    i = is;
    for (j = js + 1; j <= je; ++j) {
      // 오른쪽 이동
      arr[i][j] = copied[i][j - 1];
      if (arr[i][j] < min) min = arr[i][j];
    }
    j = je;
    for (i = is + 1; i <= ie; ++i) {
      // 아래쪽 이동
      arr[i][j] = copied[i - 1][j];
      if (arr[i][j] < min) min = arr[i][j];
    }
    i = ie;
    for (j = je - 1; j >= js; --j) {
      // 왼쪽 이동
      arr[i][j] = copied[i][j + 1];
      if (arr[i][j] < min) min = arr[i][j];
    }
    j = js;
    for (i = ie - 1; i >= is; --i) {
      // 위쪽 이동
      arr[i][j] = copied[i + 1][j];
      if (arr[i][j] < min) min = arr[i][j];
    }
    result.push(min);
  }
  return result;
}

function copyArray(arr) {
  const result = Array(arr.length)
    .fill(0)
    .map((_) => Array(arr[0].length).fill(0));
  for (let i = 0; i < arr.length; ++i) {
    for (let j = 0; j < arr[0].length; ++j) {
      result[i][j] = arr[i][j];
    }
  }
  return result;
}

🤔

이게 맞나..
로직이 어려운 문제는 아니고 실수를 하지 않아야 하는 문제

0개의 댓글