자료구조 및 알고리즘

배열 회전 스니펫

iksadnorth 2023. 9. 21. 10:06

👣 개요

코딩 테스트에 자주 나오는 보일러플레이트 기록.

[특정 행렬 회전시키기]

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

👣 코드

기본 아이디어

자리를 한 칸씩 옮기기 위해 swap처럼 임시 공간[tmp]을 하나 마련하고
1회전 하면서 tmp과 table[x][y]을 swap한다.
그리고 최종 마지막으로 최초 시작점과 tmp을 맞바꾸며 종료.

int rotate(T[][] table, int x1, int x2, int y1, int y2) {
        T swap=0; // 순수 swap을 위한 공간
        T tmp=0; // 회전을 위한 임시 공간
        
        int x=x1,y=y1; // 현재 커서 그릇 및 커서 시작점
        int x0=0,y0=0; // 다음 커서 그릇
        while(x0!=x1 || y0!=y1) {
            // tmp와 현재점[== table[x][y]]을 swap
            swap = table[x][y];
            table[x][y] = tmp;
            tmp = swap;
            
            // 다음 커서 찾기
                   if(x == x1 && y1 <= y && y < y2) {
                x0=x; y0=y+1;
            } else if(y == y2 && x1 <= x && x < x2) {
                x0=x+1; y0=y;
            } else if(x == x1 && y1 < y && y <= y2) {
                x0=x; y0=y-1;
            } else if(y == y1 && x1 < x && x <= x2) {
                x0=x-1; y0=y;
            }
            
            // 현재 커서 옮기기
            x=x0;y=y0;
        } 
        
        // 최초점 채우기
        table[x1][y2] = tmp;
    }

'자료구조 및 알고리즘' 카테고리의 다른 글

B-tree  (0) 2023.07.25
Hash Table  (0) 2023.07.24
Heap  (0) 2023.07.24
레드 블랙 트리  (0) 2023.07.24
AVL 트리  (0) 2023.07.24