<aside>
💬 lv1
, 행렬
N x N 크기의 정사각형 행렬이 주어집니다. 이 행렬을 90도 시계 방향으로 회전한 결과를 반환하는 코드를 작성해주세요.
입력 (행렬) | 출력 (90도 회전한 행렬) |
---|---|
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] | [[7, 4, 1], [8, 5, 2], [9, 6, 3]] |
[[1, 2], [3, 4]] | [[3, 1], [4, 2]] |
주어진 행렬을 90도 시계 방향으로 회전시켜서 결과를 반환합니다.
</aside>
zip()
함수def solution(matrix):
if not matrix or len(matrix) != len(matrix[0]): **#1 행렬의 길이 검사**
return "Error"
return [list(reversed(col)) for col in zip(*matrix)] **#2 리스트 컴프리헨션으로 결과 반환**
행렬의 길이 검사
len(matrix)
: 행, len(matrix[0])
: 열
만약 행과 열의 길이가 같지 않다면 "Error"
를 반환한다.
리스트 컴프리헨션으로 결과 반환
zip(*matrix)
로 같은 열의 요소끼리 튜플로 묶어준다. → [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
col
이라는 이름으로 순회한다.col
튜플을 reversed
를 통해 뒤집고 리스트로 변환해준다.reversed(col)
들을 리스트로 묶어 반환.(리스트 컴프리헨션)함수 zip()
zip(*행렬)
로 사용되었다. 행렬문제에서 이 방식을 사용하면 전치(transpose)를 수행한 결과와 동일한 값을 얻을 수 있다.*행렬
은 행렬의 각 행을 인자로 전달한다. 즉 zip(*행렬)
은 각 행에서 같은 인덱스(같은 열)을 가진 요소끼리 묶어 반환한다.함수 reversed()
reversed()
한 결과를 다른 부분에서 사용하고 싶다면 따로 지정해줘야한다.