Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
                            Tags
                            
                        
                          
                          - fifaonline4
 - 홈CCTV
 - fifaonline
 - 스쿼드 메이커
 - 안드로이드 그림판#그림메모장#낙서장
 - 독서감상문
 - Java & SpringBoot로 시작하는 웹 프로그래밍
 - 강아지 스마트 펜스
 - 안드로이드
 - K디지털크레딧
 - 혼술 술자리 인싸앱
 - D-ID
 - 아두이노#작품#사료급식기
 - 패스트캠퍼스
 - #FIFAONLINE4
 - 박스#강아지집#만들기
 - 내일배움카드
 - 부르지마세요
 - 바이트디그리
 - 안드로이드#앱만들기#알바
 - 자바 인강
 - 부의감각
 - 안드로이드 #앱개발#계산기
 - 랜덤스쿼드
 - Ai
 - 안녕 디지몬
 - 강아지 #박스집 #복층
 - 불끌때
 - 랜덤
 - 피온4
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
LC Studio
Programmers Lv2 행렬 테두리 회전하기 본문
https://programmers.co.kr/learn/courses/30/lessons/77485
코딩테스트 연습 - 행렬 테두리 회전하기
6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]
programmers.co.kr
주어진 테두리만큼 행렬을 회전시키고 최솟값을 찾는 문제였다.
어떻게 풀지 고민하다 결국 다른 블로그들을 찾아보고 아이디어를 얻었다.
풀이방식
1. matrix[][] 라는 2차원 기본배열 선언
2. 좌표값을 받아와 배열에 맞게 숫자를 변경(-1)
3. 초기값을 저장 및 최솟값으로 저장
4. 배열을 회전시킴 + 최솟값 비교
4-1 (왼쪽) 아래에서 위로
4-2 (아래) 왼쪽에서 오른쪽으로
4-3 (오른쪽) 위에서 아래로
4-4 (위) 오른쪽에서 왼쪽으로
5. 초기값을 다시 배열에 넣어줌
6. 최솟값 return
아래 코드와 주석을 함께보면 더 잘 이해될 것이다.
class Solution {
    
    int[][] matrix;
    
    public int[] solution(int rows, int columns, int[][] queries) {
        
        this.matrix = new int[rows][columns];
        int[] answer = new int[queries.length];
        
        //기본 배열을 선언합니다
        for(int i=0;i<rows;i++){
            for(int j=0;j<columns;j++){
                matrix[i][j] = i*columns+j+1;
            }
        }
        
        //queries의 개수만큼 반복합니다
        for(int i=0;i<queries.length;i++){
            answer[i] = rotate(queries[i]);
        }
        
        return answer;
    }
    
    public int rotate(int[] query){
        //좌표값을 받아와 배열의 좌표값으로 변환합니다
        int x1 = query[0]-1; 
        int y1 = query[1]-1;
        int x2 = query[2]-1;
        int y2 = query[3]-1;
        
        //시작위치의 값을 최솟값으로 저장해줍니다
        int tmp = this.matrix[x1][y1];
        int min = tmp;
        
        //첫번째 회전
        for(int i = x1;i<x2;i++){
            this.matrix[i][y1] = this.matrix[i+1][y1];
            if(min > this.matrix[i][y1]) min = this.matrix[i][y1];
        }
        
        //두번째 회전
        for(int i = y1;i<y2;i++){
            this.matrix[x2][i] = this.matrix[x2][i+1];
            if(min > this.matrix[x2][i]) min = this.matrix[x2][i];
        }
        
        //세번째 회전
        for(int i = x2;i>x1;i--){
            this.matrix[i][y2] = this.matrix[i-1][y2];
            if(min > this.matrix[i][y2]) min = this.matrix[i][y2];
        }
        
        //네번째 회전
        for(int i = y2;i>y1;i--){
            this.matrix[x1][i] = this.matrix[x1][i-1];
            if(min > this.matrix[x1][i]) min = this.matrix[x1][i];
        }
        
        this.matrix[x1][y1+1] = tmp;
        
        return min;
        
    }
}반응형
    
    
    
  'Java > Programmers' 카테고리의 다른 글
| Programmers Lv1 개인정보 수집 유효기간 (Kotlin) (0) | 2023.08.09 | 
|---|---|
| Programmers Lv2 k 문자열 압축 (JAVA) (0) | 2022.05.06 | 
| Programmers Lv2 k 진수에서 소수 개수 구하기 (JAVA) (0) | 2022.03.29 | 
| Programmers Lv1 신고 결과 받기 (0) | 2022.03.28 |