행렬 테두리 회전하기

LJM·2023년 8월 23일
0

programmers

목록 보기
76/92

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

디버깅하는데 시간이 넘 오래 걸렸다

import java.util.*;

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        
        int[][] map = new int[rows+1][columns+1];
        for(int i = 1; i < map.length; ++i)
        {
            for(int j = 1; j < map[0].length; ++j)
            {
                map[i][j] = (i-1)*(map[0].length-1) + j;
            }
        }
            
        
        
        for(int i = 0; i < queries.length; ++i)
        {
            //가장작은숫자찾기
            int sr = queries[i][0];
            int sc = queries[i][1];
            int er = queries[i][2];
            int ec = queries[i][3];
            
            ArrayList<Integer> arr = new ArrayList<>();
            //윗변
            for(int j = sc; j <= ec; ++j) 
            {
                int cur = map[sr][j];
                arr.add(cur);
            }
            
            //오른변
            for(int j = sr+1; j <= er; ++j)
            {
                int cur = map[j][ec];
                arr.add(cur);
            }
            
            //밑변
            for(int j = ec-1; j >= sc; --j)
            {
                int cur = map[er][j];
                arr.add(cur);
            }
            
            //왼변
            for(int j = er-1; j>= sr; --j)
            {
                int cur = map[j][sc];
                arr.add(cur);
            }
            
            int min = 1000000;
            for(int val : arr)
                min = Math.min(min, val);
            answer[i] = min;
            
            //for(int val : arr)
            //    System.out.print(val+" ");
            
            //회전하기
            int idx = 0;
            map[sr][sc] = arr.get(arr.size()-1);
            //윗변
            for(int j = sc+1; j <= ec; ++j) 
            {
                map[sr][j] = arr.get(idx++);
            }
            
            //오른변
            for(int j = sr+1; j <= er; ++j)
            {
                map[j][ec] = arr.get(idx++);
            }
            
            //밑변
            for(int j = ec-1; j >= sc; --j)
            {
                map[er][j] = arr.get(idx++);
            }
            
            //왼변
            for(int j = er-1; j>= sr; --j)
            {
                map[j][sc] = arr.get(idx++);
            } 
            
            //for(int j = 1; j < map.length; ++j)
            //{
            //    for(int k = 1; k < map[0].length; ++k)
            //    {
            //        System.out.print(map[j][k] + " ");
            //    }
            //    System.out.println();
            //}
        }
        
       
        
        return answer;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글