갓생사는 김초원의 개발 블로그
chocho_log
갓생사는 김초원의 개발 블로그
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • 개발 (22)
      • Spring (4)
      • Java (3)
      • Database (2)
      • Elasticsearch (3)
      • ETC (3)
      • JPA (3)
      • 이슈 (1)
    • 코딩 테스트 (43)
      • 프로그래머스 (23)
      • 백준 (12)
      • TIP (8)
    • 자료구조 (2)
    • 알고리즘 (4)
    • 잡생각 (0)
    • 경험 (5)
      • AWS re:Invent 2024 (5)

블로그 메뉴

    공지사항

    인기 글

    태그

    • war
    • jar
    • Spring Boot Embedded Tomcat
    • querydsl
    • Lazy Loading
    • 지연로딩
    • jpa
    • 디자인패턴 #SOLID 원칙

    최근 댓글

    최근 글

    갓생사는 김초원의 개발 블로그

    chocho_log

    [코딩테스트] 2차원배열 회전하기
    코딩 테스트/TIP

    [코딩테스트] 2차원배열 회전하기

    2021. 5. 24. 01:22

    코딩테스트 문제를 풀다보면 2차원 배열을 조작하는 경우가 굉장히 많은 것 같다. (맵을 상하좌우로 기울여라, 지도를 회전하라 등등..)

    최근에 푼 2020 KAKAO BLIND RECRUITMENT 기출문제중 자물쇠와 열쇠라는 문제가 있는데 여기서 2차원배열을 90, 180, 270, 360 도 회전시켜야 하는 코드가 필요하다. 

     

    배열의 인덱스를 이용해서 N도 회전했을 때 각 자리에 바뀌는 값들을 구해야 하는데 꾀나 번거로웠다. 

    다음에 또 구해야 한다면 할 수는 있겠지만 매번 시간을 굉장히 많이 잡아먹을 것 같아서 블로그에 정리해두려고 한다. 

     

    다음과 같은 2차원 배열이 있다고 하자. 

     

    먼저 배열을 시계방향으로 90도 회전시키면 배열이 다음과 같이 값이 바뀐다. 

     

    그리고 다음은 시계방향으로 180도 회전한 모습이다. 

     

    다음은 270도^^

     

    360도 회전하면 처음 모습으로 다시 돌아온다. 

     

    각각 회전하여 바뀐 값을 임시 temp배열에 넣고 temp배열을 출력하는 코드이다. 

    package com.algorithm;
    
    public class Main {
    
        public static void main(String[] args) {
            int[][] array = {{0, 0, 0}, {1, 0, 0}, {0, 1, 1}};
            int[][] temp = new int[array.length][array[0].length];
    
            int N = array.length;
            for (int k = 0; k < 4; k++) { // 0: 90도/ 1: 180도/ 2: 270도/ 3: 360도
                for (int i = 0; i < array.length; i++) {
                    for (int j = 0; j < array[0].length; j++) {
    
                        if (k == 0) { // 90도
                            temp[i][j] = array[N - j - 1][i];
                        } else if (k == 1) { // 180도
                            temp[i][j] = array[N - i - 1][N - j - 1];
                        } else if (k == 2) { // 270도
                            temp[i][j] = array[j][N - i - 1];
                        } else if (k == 3) { // 360도
                            temp[i][j] = array[i][j];
                        }
                    }
                }
    
                for (int l = 0; l < temp.length; l++) {
                    for (int m = 0; m < temp[l].length; m++) {
                        System.out.print(temp[l][m] + " ");
                    }
                    System.out.println();
                }
                System.out.println();
    
                temp = new int[array.length][array[0].length];
            }
        }
    }
    

     

    - 출력

    0 1 0 
    1 0 0 
    1 0 0 
    
    1 1 0 
    0 0 1 
    0 0 0 
    
    0 0 1 
    0 0 1 
    0 1 0 
    
    0 0 0 
    1 0 0 
    0 1 1 

    '코딩 테스트 > TIP' 카테고리의 다른 글

    [JAVA] 날짜, 시간 계산 총 정리  (0) 2020.11.24
    [JAVA] 10진수 n진수로 변환하기  (0) 2020.11.21
    [JAVA] 문자열이 영어로만 이루어져 있는지 판별하기(Pattern.mathces())  (0) 2020.11.10
    [JAVA] 아스키(ASCII) 코드 값 구하기  (0) 2020.11.10
    [JAVA] 최대 공약수(GCD), 최소 공배수(LCM) 구하기  (2) 2020.10.29
      '코딩 테스트/TIP' 카테고리의 다른 글
      • [JAVA] 날짜, 시간 계산 총 정리
      • [JAVA] 10진수 n진수로 변환하기
      • [JAVA] 문자열이 영어로만 이루어져 있는지 판별하기(Pattern.mathces())
      • [JAVA] 아스키(ASCII) 코드 값 구하기
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그 github: https://github.com/kimchowon

      티스토리툴바