뮁이의 개발새발

[JAVA] 프로그래머스 행렬 테두리 회전하기 본문

Algorithm

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

뮁뮁이 2021. 9. 14. 03:54

이젠 행렬 돌리는거는 도사가 되었다 ... 어디 한번 돌려보시지,,,

class Solution {
    static int[][] map;
    
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        
        map = new int[rows][columns];

		/* 초기 숫자 입력 부분 */
		int cnt = 1;
		for (int i = 0; i < rows; i++) {
			for (int j = 0; j < columns; j++) {
				map[i][j] = cnt;
				cnt++;
			}
		}

		/* 돌리는 부분 */
		for (int q = 0; q < queries.length; q++) {
			answer[q] = ROLL(queries[q], rows * columns);
		}
        
        return answer;
    }
    
    static int ROLL(int[] query, int maxsize) {
		int starty = query[0] - 1; // map의 index가 1씩 작기때문에 -1 해줌
		int startx = query[1] - 1;
		int endy = query[2] - 1;
		int endx = query[3] - 1;

		int min = maxsize;

		int temp = map[starty][startx];
		for (int i = starty; i < endy; i++) {
			map[i][startx] = map[i + 1][startx];
			min = Math.min(min, map[i][startx]); // 변화된 숫자의 최솟값 저장
		}
		for (int i = startx; i < endx; i++) {
			map[endy][i] = map[endy][i + 1];
			min = Math.min(min, map[endy][i]);
		}
		for (int i = endy; i > starty; i--) {
			map[i][endx] = map[i - 1][endx];
			min = Math.min(min, map[i][endx]);
		}
		for (int i = endx; i > startx; i--) {
			map[starty][i] = map[starty][i - 1];
			min = Math.min(min, map[starty][i]);
		}

		map[starty][startx + 1] = temp;
		min = Math.min(min, temp);

		System.out.println(min);
		return min; //최솟값 반환
	}
}
Comments