본문 바로가기
자료구조 & 알고리즘/문제 풀이 (프로그래머스)

행렬 테두리 회전하기 (행렬)

by 정구정구 2026. 7. 6.

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

 

프로그래머스

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

programmers.co.kr

 

문제 풀이

 뭔가 특별한 알고리즘이 필요하진 않고 그냥 행렬을 만들고 행렬 내에 요소들을 다루는 문제인 것 같다.

 

 

작성한 코드 (성공)

import java.util.*;

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
         int[][] matrix = new int[rows+1][columns+1];
        int count = 1;
        for (int i = 1; i < rows+1; i++) {
            for (int j = 1; j < columns+1; j++) {
                matrix[i][j] = count++;
            }
        }

        int[] answer = new int[queries.length];

        for (int i = 0; i < queries.length; i++) {

            int y1 = queries[i][0];
            int x1 = queries[i][1];
            int y2 = queries[i][2];
            int x2 = queries[i][3];

            int prevNum = matrix[y1+1][x1];
            int min = 10001;

            // 오른쪽으로 가
            for (int x = x1; x <= x2; x++) {
                int now =  matrix[y1][x];

                int temp = prevNum;
                prevNum = now;
                matrix[y1][x] = temp;

                min = Math.min(now,min);
            }

            // 아래로 가
            for (int y = y1+1; y <= y2; y++) {
                int now = matrix[y][x2];

                int temp = prevNum;
                prevNum = now;
                matrix[y][x2] = temp;

                min = Math.min(now,min);
            }

            // 왼쪽으로 가
            for (int x = x2-1; x >= x1; x--) {
                int now = matrix[y2][x];

                int temp = prevNum;
                prevNum = now;
                matrix[y2][x] = temp;

                min = Math.min(now,min);
            }

            // 위로 가
            for (int y = y2-1; y >= y1+1; y--) {
                int now = matrix[y][x1];

                int temp = prevNum;
                prevNum = now;
                matrix[y][x1] = temp;

                min = Math.min(now,min);
            }

            answer[i] = min;
        }
        
        return answer;
    }
}

 

 

더 좋은 코드를 만들기 위한 생각들

  • 델타 행렬로 풀까 하다가 오히려 가독성이 떨어지는 느낌이라서 그냥 풀었음
  • swap 함수를 구현해서 썼으면 중복코드를 많이 줄였을 것