CS & Algorithm/Algorithm

[구현] 행렬 테두리 회전하기

eunkonge 2026. 7. 25. 22:12 댓글 0

❓문제

rows X columns 크기의 행렬 (x1, y1, x2, y2) 영역에 해당하는 직사각형의 테두리 숫자를 시계방향으로 회전


🖐️손코딩

main():
	matrix[rows][columns]
    num = 1
    answer[queries.length]
    
    for(i: 0 ~ rows-1)
    	for(j: 0 ~ columns-1)
        	matrix[i][j] = num
            num++
            
	for(i : queries)
    	left, right, top, bottom
        temp = matrix[top][left]
        min = temp
        
        for(x: top+1 ~ bottom)
        	matrix[x-1][left] = matrix[x][left]
            min = Math.min(min, matrix[x-1][left])
        
        for(x: left+1 ~ right)
        	matrix[bottom][x-1] = matrix[bottom][x]
            min = Math.min(min, matrix[bottom][x-1])
        
        for(x: bottom-1 ~ top)
        	matrix[x+1][right] = matrix[x][right]
            min = Math.min(min, matrix[x+1][right])
            
        for(x: right-1 ~ left+1)
        	matrix[top][x+1] = matrix[top][x]
            min = Math.min(min, matrix[top][x+1])
            
  		matrix[top][left+1] = temp
        answer[i] = min

👩‍💻구현 코드

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int[][] matrix = new int[rows][columns];
        int num = 1;
        
        for(int i = 0; i<rows; i++){
            for(int j = 0; j<columns; j++){
                matrix[i][j] = num;
                num++;
            }
        }
        
        for(int i = 0; i<queries.length; i++){
            int[] query = queries[i];
            int top = query[0]-1;
            int left = query[1]-1;
            int bottom = query[2]-1;
            int right = query[3]-1;
            
            int temp = matrix[top][left];
            int min = temp;
            
            for(int x=top+1; x<=bottom; x++){
                matrix[x-1][left] = matrix[x][left];
                min = Math.min(min, matrix[x-1][left]);
            }
            
            for(int x = left+1; x<=right; x++){
                matrix[bottom][x-1] = matrix[bottom][x];
                min = Math.min(min, matrix[bottom][x-1]);
            }
            
            for(int x = bottom-1; x>= top; x--){
                matrix[x+1][right] = matrix[x][right];
                min = Math.min(min, matrix[x+1][right]);
            }
            
            for(int x = right-1; x>= left+1; x--){
                matrix[top][x+1] = matrix[top][x];
                min = Math.min(min, matrix[top][x+1]);
            }
            
            matrix[top][left+1] = temp;
            answer[i] = min;
        }
        return answer;
    }
}

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

 

프로그래머스

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

programmers.co.kr

 

 

'CS & Algorithm > Algorithm' 카테고리의 다른 글

[BFS] 리코쳇 로봇  (0) 2026.07.25
[BFS] 석유 시츄  (0) 2026.07.25
[Programmers:DFS/BFS] 여행경로  (0) 2026.07.06
[Programmers:DP] 도둑질  (0) 2026.07.01
[Programmers:DP] 사칙연산  (0) 2026.07.01

많이 읽은 글