프로그래머스 - 행렬 테두리 회전하기 [2021 Dev-Matching: 웹 백엔드 개발자(상반기)] :: 매운코딩
728x90
300x250

https://programmers.co.kr/learn/courses/30/lessons/77485?language=java 

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

 

행렬을 시계방향으로 회전하면서 가장 작은 값을 구하는 문제

import java.util.*;

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int seq =0;
        
        int map[][] = new int[rows][columns];
        int mapCopy[][] = new int[rows][columns];
        
        //전체 배열 숫자 채우기
        int n = 1;
        for (int i = 0; i < rows; i++) {
			for (int j = 0; j < columns;  j++) {
				map[i][j]=n;
				n++;
			}
		}
        
        
        //반복문 돌며 직사각형 좌표 꺼내기
        for (int i = 0; i < queries.length; i++) {
			int sx = queries[i][0]-1;
			int sy = queries[i][1]-1;
			int ex = queries[i][2]-1;
			int ey = queries[i][3]-1;

			int min = map[sx][sy];

			//왼->오
			int next = map[sx][sy];
			for (int j = sy+1; j <= ey ; j++) {
				int tmp = map[sx][j];
				min = Math.min(min, tmp);
				map[sx][j] = next;
				next = tmp;
			}
			
			//위->아래
			for (int j = sx+1; j <=ex; j++) {
				int tmp = map[j][ey];
				min = Math.min(min, tmp);
				map[j][ey] = next;
				next = tmp;
			}
			
			//오->왼
			for (int j = ey-1; j >= sy; j--) {
				int tmp = map[ex][j];
				min = Math.min(min, tmp);
				map[ex][j] = next;
				next = tmp;
			}
			
			//아래->위
			for (int j = ex-1; j >= sx; j--) {
				int tmp = map[j][sy];
				min = Math.min(min, tmp);
				map[j][sy]=next;
				next=tmp;
			}
			
			
			answer[seq++]=min;
		}
        //회전하기
        return answer;
    }
}
728x90

+ Recent posts