👣 개요
코딩 테스트에 자주 나오는 보일러플레이트 기록.
[특정 행렬 회전시키기]
👣 코드
기본 아이디어
자리를 한 칸씩 옮기기 위해 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 |