https://leetcode.com/problems/rotate-image/discuss/18872/A-common-method-to-rotate-the-image
되게 일반적인 문제인데 여태까지 이걸 몰랐다...;코드를 그대로 가져온다.
/* * clockwise rotate * first reverse up to down, then swap the symmetry * 1 2 3 7 8 9 7 4 1 * 4 5 6 => 4 5 6 => 8 5 2 * 7 8 9 1 2 3 9 6 3 */ /* matrix의 길이를 n이라고 하면 0행과 n-1행을 변경, 1행과 n-2행을 변경, 등등등 반복 후 반복으로 돌면서 스왑해준다.*/ void rotate(vector> &matrix) { reverse(matrix.begin(), matrix.end()); for (int i = 0; i < matrix.size(); ++i) { for (int j = i + 1; j < matrix[i].size(); ++j) swap(matrix[i][j], matrix[j][i]); } } /* * anticlockwise rotate * first reverse left to right, then swap the symmetry * 1 2 3 3 2 1 3 6 9 * 4 5 6 => 6 5 4 => 2 5 8 * 7 8 9 9 8 7 1 4 7 */ // 각 행을 전부 거꾸로 만들어준후 각 행의 첫번째 인덱스가 첫번째 열, 두번째 인덱스가 두번째 열 .... void anti_rotate(vector > &matrix) { for (auto vi : matrix) reverse(vi.begin(), vi.end()); for (int i = 0; i < matrix.size(); ++i) { for (int j = i + 1; j < matrix[i].size(); ++j) swap(matrix[i][j], matrix[j][i]); } }
'algorithm > theory' 카테고리의 다른 글
비트 연산 활용. (0) | 2020.04.15 |
---|---|
linked list 안에 cycle이 있는지 확인하는 방법.(토끼와 거북이 알고리즘) (0) | 2020.04.11 |
rope data structure (0) | 2019.08.31 |
확률적 자료구조를 이용한 추측 - hyperloglog (0) | 2017.04.26 |
각종 자료구조, 정렬의 시간복잡도. (0) | 2016.11.15 |