Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

PS/프로그래머스

[프로그래머스][구현] 행렬 테두리 회전하기

by 꽁이꽁설꽁돌 2025. 10. 1.
728x90
반응형
     

목차

     

    문제

    https://school.programmers.co.kr/learn/courses/30/lessons/77485

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

     

    문제 구현 방향

    나는 먼저 각 배열의 원소를 순차적으로 담은 뒤에 배열의 현재 인덱스가 queue.length + idx - 1 인덱스를 가르키게끔 만들어 풀었다. 또한 이런식으로 하면 모든 배열을 순회하여 바꾸지 않아도 되기 때문에 시간초과가 나지 않는다.

     

     

    코드 구현

    let dir = [
        [1, 0],
        [0, 1],
        [-1, 0],
        [0, -1],
    ];
    var answer = [];
    
    function solution(rows, columns, queries) {
        let board = Array.from({ length: rows + 1}, () =>
            Array(columns + 1).fill(0)
        );
        let cnt = 1;
        for (let i = 1; i <= rows; i++) {
            for (let j = 1; j <= columns; j++) {
                board[i][j] = cnt++;
            }
        }
        for (let [y1, x1, y2, x2] of queries) {
            let queue = lotate(board, x1, y1, x2, y2);
            let ans = Infinity;
            
            for (let idx = 0; idx < queue.length; idx++) {
                let [curX, curY, value] = queue[idx];
                let [, , preValue] = queue[(queue.length + idx - 1) % queue.length];
                board[curY][curX] = preValue;
                ans = Math.min(ans, preValue);
            }
            answer.push(ans);
        }
        return answer;
    }
    
    function lotate(board, x1, y1, x2, y2) {
        let queue = [];
        let curx = x1;
        let cury = y1;
    
        for (let dr of dir) {
            while (true) {
                let nx = dr[0] + curx;
                let ny = dr[1] + cury;
                if (nx < x1 || nx > x2 || ny < y1 || ny > y2) break;
                curx = nx;
                cury = ny;
                queue.push([nx, ny, board[ny][nx]]);
            }
        }
        return queue;
    }
    반응형