@@ -615,6 +615,45 @@ Counter('hello world').most_common(2) # [('l', 3), ('o', 2)]
615
615
616
616
` most_common() ` 을 사용하면 전체 결과를 튜플의 리스트로 리턴하고, 숫자를 명시하면 상위 n개에 해당하는 결과만 출력합니다.
617
617
618
+ ### 배열 회전하기
619
+
620
+ 코테에서 다양한 구현 문제를 풀다보면, 생각보다 귀찮은 친구가 여러가지 있습니다. 그 중 가장 귀찮을 수 있는 것은 바로 ** 배열 회전하기** 죠?
621
+
622
+ 예를 들어, 다음과 같은 배열이 있다면,
623
+ ||||
624
+ | ---| ---| ---|
625
+ | 1| 2| 3|
626
+ | 4| 5| 6|
627
+ | 7| 8| 9|
628
+
629
+ 다음과 같이 회전하는거죠.
630
+
631
+ ||||
632
+ | ---| ---| ---|
633
+ | 7| 4| 1|
634
+ | 8| 5| 2|
635
+ | 9| 6| 3|
636
+
637
+ 일반적으로 이런 문제를 해결하기 위해선, 이중 for문을 사용합니다.
638
+ 하지만 놀랍게도 파이썬은 한 줄로 끝낼 수 있어요!
639
+
640
+ ``` python
641
+ def rotate (arr ):
642
+ return list (zip (* arr[::- 1 ]))
643
+
644
+ print (rotate([[1 , 2 , 3 ], [4 , 5 , 6 ], [7 , 8 , 9 ]]))
645
+ # [(7, 4, 1), (8, 5, 2), (9, 6, 3)]
646
+ ```
647
+
648
+ 아니 이게 어떻게 되는거죠? 차근 차근 알아보도록 해요.
649
+
650
+ - 먼저, ` arr[::-1] ` 이므로 배열을 뒤집습니다. 이렇게 되면 ` [[7, 8, 9], [4, 5, 6], [1, 2, 3]] ` 이 됩니다.
651
+ - 이어서, * 을 사용했으니 배열이 언패킹이 됩니다. 즉, ` [7, 8, 9] ` , ` [4, 5, 6] ` , ` [1, 2, 3] ` 으로 분리됩니다.
652
+ - 위의 세 배열에 대해 ` zip() ` 을 수행합니다. 각각의 배열을 묶어주므로, ` (7, 4, 1) ` , ` (8, 5, 2) ` , ` (9, 6, 3) ` 이 됩니다.
653
+ - ` zip() ` 의 반환값은 zip 객체이므로, 리스트로 변환해줍니다.
654
+
655
+ 과정은 복잡하지만, 코드는 정말 짧죠?
656
+
618
657
* * *
619
658
620
659
Reference
0 commit comments