본문 바로가기

알고리즘/카카오

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

반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Solution {
	
	static int[][] map;
	static ArrayList<Integer> list = new ArrayList();
	
    public static int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        
        map = 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++;
        	}
        }
        
        for(int t=0; t<queries.length; t++) {
        	
        	list.clear();
        	
        	int x1 = queries[t][0]-1;
        	int y1 = queries[t][1]-1;
        	int x2 = queries[t][2]-1;
        	int y2 = queries[t][3]-1;
        	
        	
        	// 1. 윗 부분 돌리기
        	int a = map[x1][y2];
        	list.add(a);
        	for(int j=y2; j>y1; j--) {
        		map[x1][j] = map[x1][j-1];
        		list.add(map[x1][j]);
        	}
        	
        	// 2. 오른쪽 부분 돌리기
        	int b = map[x2][y2];
        	list.add(b);
        	for(int i=x2; i>x1+1; i--) {
        		map[i][y2] = map[i-1][y2];
        		list.add(map[i][y2]);
        	}
        	
        	map[x1+1][y2] = a;
        	
        	// 3. 아래 부분 돌리기
        	a = map[x2][y1];
        	list.add(a);
        	for(int j=y1; j<y2-1; j++) {
        		map[x2][j] = map[x2][j+1];
        		list.add(map[x2][j]);
        	}
        	
        	map[x2][y2-1] = b;
        	
        	// 4. 왼쪽 부분 돌리기
        	for(int i=x1; i<x2-1; i++) {
        		map[i][y1] = map[i+1][y1];
        		list.add(map[i][y1]);
        	}
        	
        	map[x2-1][y1] = a;

        	Collections.sort(list);
        	answer[t] = list.get(0);
        }
        
        return answer;
    }
}
반응형