프로그래머스 행렬 테두리 회전하기[실패분석 - 시간 부족]

byeol·2023년 5월 5일
0
post-thumbnail

접근

행렬 테두리 회전하기

단순 구현 문제라고 생각하여 접근하였지만
다른 문제를 푸느라 시간이 부족하여 풀지 못했습니다.

저는 아래와 같은 과정으로 풀이했습니다.

  1. 문제의 주어진 row, column을 이용해서 2차원 배열을 만든다.
  2. 문제에 주어진 queries에 row에 차례대로 접근하는 for문
  3. 갱신할 때 갱신 전의 배열을 참고해야 하기 때문에 깊은 복사를 이용해서 갱신 전의 2차원 배열과 갱신한 2차원 배열을 만든다.
  4. 동일한 색으로 칠해진 칸들은 같은 방향, 자신 위치의 바로 이전 칸들의 값들을 저장합니다.
  5. 이동시키면서 가장 작은 값을 갱신하고 answer에 저장합니다.

풀이

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer =new int[queries.length];
        
        int index=1;
        int[][] newMap = new int[rows][columns];
        
        for(int i=0;i<rows;i++){
            for(int j=0;j<columns;j++){
                newMap[i][j]=index++;
            }
        }
        
        for(int i=0;i<queries.length;i++){
            int x1 = queries[i][0];
            int y1 = queries[i][1];
            int x2 = queries[i][2];
            int y2 = queries[i][3];
            
            int[][] deepMap = new int[rows][columns];
            
            for(int j=0;j<rows;j++){
                deepMap[j]=newMap[j].clone();
            }
            
            int min = Integer.MAX_VALUE;
            
            //위쪽
            for(int j=y1;j<=y2-1;j++) {
                newMap[x1-1][j]=deepMap[x1-1][j-1];
                if(min>newMap[x1-1][j]) min=newMap[x1-1][j];
            }
            
            // 오른쪽
            for(int j=x1;j<=x2-1;j++){
                 newMap[j][y2-1]=deepMap[j-1][y2-1];
                if(min>newMap[j][y2-1]) min=newMap[j][y2-1];
            }
            
            // 아래쪽
            for(int j=y1-1;j<=y2-2;j++) {
                newMap[x2-1][j]=deepMap[x2-1][j+1];
                if(min>newMap[x2-1][j]) min=newMap[x2-1][j];
            }
            // 왼쪽
            for(int j=x1-1;j<=x2-2;j++){
                 newMap[j][y1-1]=deepMap[j+1][y1-1];
                if(min>newMap[j][y1-1]) min=newMap[j][y1-1];
            }
            
        
            answer[i] = min;
            
            
            
        }
        
        
        
        
        
        
        return answer;
    }
}
profile
꾸준하게 Ready, Set, Go!

0개의 댓글