프로그래머스/LEVEL 2

행렬 테두리 회전하기

GenieLove! 2021. 5. 30. 21:46
728x90
반응형

Java

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int[][] arr = new int[rows][columns];
        int start = 1;
        for(int i = 0; i < arr.length; i++){
            for(int j = 0; j < arr[i].length; j++){
                arr[i][j] = start++;
            }
        }
        
        for(int index = 0; index < queries.length; index++){
            int startX = queries[index][0] - 1;
            int startY = queries[index][1] - 1;
            int endX = queries[index][2] - 1;
            int endY = queries[index][3] - 1;
            int before = arr[startX][startY];
            answer[index] = before;
            for(int i = startY + 1; i <= endY; i++){
                int temp = arr[startX][i];
                arr[startX][i] = before;
                before = temp;
                if(before < answer[index]) answer[index] = before;
            }
            for(int i = startX + 1; i <= endX; i++){
                int temp = arr[i][endY];
                arr[i][endY] = before;
                before = temp;
                if(before < answer[index]) answer[index] = before;
            }
            for(int i = endY - 1; i >= startY; i--){
                int temp = arr[endX][i];
                arr[endX][i] = before;
                before = temp;
                if(before < answer[index]) answer[index] = before;
            }
            for(int i = endX - 1; i >= startX; i--){
                int temp = arr[i][startY];
                arr[i][startY] = before;
                before = temp;
                if(before < answer[index]) answer[index] = before;
            }
        }
        
        return answer;
    }
}

Python

def solution(rows, columns, queries):
    answer = []
    arr = list()
    for i in range(rows):
        temp = list()
        for j in range(columns):
            temp.append(j + 1 + i * columns)
        arr.append(temp)
        
    for index in range(0, len(queries)):
        startX = queries[index][0] - 1
        startY = queries[index][1] - 1
        endX = queries[index][2] - 1
        endY = queries[index][3] - 1
        before = arr[startX][startY]
        answer.append(before)
        
        for i in range(startY + 1, endY + 1, 1):
            arr[startX][i], before = before, arr[startX][i]
            if before < answer[index]:
                answer[index] = before 
        
        for i in range(startX + 1, endX + 1, 1):
            arr[i][endY], before = before, arr[i][endY]
            if before < answer[index]:
                answer[index] = before 
        
        for i in range(endY - 1, startY - 1, -1):
            arr[endX][i], before = before, arr[endX][i]
            if before < answer[index]:
                answer[index] = before 
        
        for i in range(endX - 1, startX - 1, -1):
            arr[i][startY], before = before, arr[i][startY]
            if before < answer[index]:
                answer[index] = before 
    
    return answer
728x90
반응형

'프로그래머스 > LEVEL 2' 카테고리의 다른 글

수식 최대화  (0) 2021.06.06
튜플  (0) 2021.06.03
게임 맵 최단거리  (0) 2021.05.27
예상 대진표  (0) 2021.05.22
단체사진 찍기  (0) 2021.05.17