Level2 - 행렬 테두리 회전하기

손대중·2022년 5월 1일
0

문제 설명 및 링크

프로그래머스 - 행렬 테두리 회전하기 링크

나의 풀이

특이할만한 알고리즘은 없음. 그냥 array 를 회전시키면서 최소값을 구하면 됨.

다른 사람 풀이도 다르진 않은데 나보다 더 깔끔하게 코딩함.

코드

모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.

// array 를 회전시키고 최소값을 구하는 함수
const getMinWithrotate = (query, arr) => {
   const y1 = query[0] - 1;
   const x1 = query[1] - 1;
   const y2 = query[2] - 1;
   const x2 = query[3] - 1;
   let min = arr[y1][x1];
   
   let curX = x1;
   let curY = y1;
   let pre = min;
   
   do {
       if (curX < x2 && curY === y1) {
           curX++;
       } else if (curX === x2 && curY < y2) {
           curY++;
       } else if (curX > x1 && curY === y2) {
           curX--;
       } else if (curX === x1 && curY > y1) {
           curY--;
       }
       
       let temp = arr[curY][curX];
       arr[curY][curX] = pre;
       pre = temp;
       
       min = min > pre ? pre : min;
   } while (curY !== y1 || curX !== x1);
   
   return min;
};

function solution(rows, columns, queries) {
   var answer = [];
   
   let arr = [];
   let num = 1;
   for (let i = 0; i < rows; i++) {
       arr[i] = [];
       for (let j = 0; j < columns; j++) {
           arr[i].push(num);
           num++;
       }
   }
   
   const result = [];
   
   queries.map(query => {
       result.push(getMinWithrotate(query, arr));
   });
   
   return result;
}

0개의 댓글