File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[][] } matrix
3
+ * @return {void } Do not return anything, modify matrix in-place instead.
4
+ */
5
+ const rotate = function ( matrix ) {
6
+ const n = matrix . length ;
7
+
8
+ // 상하좌우 겉에서부터 한 겹씩 안으로 진입
9
+ for ( let layer = 0 ; layer < Math . floor ( n / 2 ) ; layer ++ ) {
10
+
11
+ // layer 위의 각 칸들을 rotate
12
+ // 하나를 rotate했을 때 연쇄적으로 rotate되는 규칙을 이용해
13
+ // 네 칸 rotate하는 걸 x번 반복함
14
+
15
+ // x = n - 2 * layer - 1
16
+ // 전체 배열 크기 n에서 layer만큼 안쪽으로 들어가야 하는데
17
+ // 상하, 좌우만큼 들어가야 하니까 2를 곱함
18
+ // 1을 안 빼면 이미 rotate한 자리를 다시 rotate하므로 빼줌
19
+
20
+ for ( let i = 0 ; i < n - 2 * layer - 1 ; i ++ ) {
21
+ const top = layer ;
22
+ const bottom = n - 1 - layer ;
23
+ const left = top ;
24
+ const right = bottom ;
25
+
26
+ const topLeft = matrix [ top ] [ left + i ] ;
27
+ matrix [ top ] [ left + i ] = matrix [ bottom - i ] [ left ] ;
28
+ matrix [ bottom - i ] [ left ] = matrix [ bottom ] [ right - i ] ;
29
+ matrix [ bottom ] [ right - i ] = matrix [ top + i ] [ right ] ;
30
+ matrix [ top + i ] [ right ] = topLeft ;
31
+ }
32
+ }
33
+ } ;
34
+
35
+ // 시간복잡도: O(n^2)
36
+ // 공간복잡도: O(1)
37
+
38
+ // 참고로 중첩 구조를 다음과 같이 바꿔도 됨
39
+ const top = 0 ;
40
+ const bottom = n - 1 ;
41
+
42
+ while ( top < bototm ) {
43
+ const left = top ;
44
+ const right = bottom ;
45
+
46
+ for ( let i = top ; i < bottom ; i ++ ) {
47
+ // rotate
48
+ }
49
+
50
+ top ++ ;
51
+ bottom -- ;
52
+ }
You can’t perform that action at this time.
0 commit comments