-
[ 알고리즘 TIP ] 2차원 배열 회전알고리즘 2024. 2. 20. 10:01728x90
여러 문제에서 2차원 배열을 회전시켜야 하는 경우가 많다
가령, 2048같은 구현 문제를 생각하면 한쪽 방향으로 값들을 이동 시켜야하는데 이걸 회전을 통해서 항상 아래로 내리게 한다면 좀 편하게 느끼고 접근할 수 있다! ( 물론 내 생각이다 )
방법은 2가지가 있다 ( 편한대로 쓰세요 )
1. 2차원 배열을 90도 회전 시키고 필요한 만큼 반복 시키기 [ 아래의 코드를 적절히 변경해보자!! ]
2. 90, 180, 270, 360 등에 대해서 나올 수 있는 4가지에 대해서 정의해준다. ( 이러면 -90도도 가능 )
문제에 따라서 다른 방법을 선택하는게 가독성 측면 & 풀이 시간속도에 영향을 줄 것 같다.
전체 코드
def rotate(tmp_arr, d): n = len(tmp_arr) new_arr = [[0] * n for _ in range(n)] if d % 4 == 1: # 90도 for r in range(n): for c in range(n): new_arr[c][n-1-r] = tmp_arr[r][c] elif d% 4 == 2: # 180도 for r in range(n): for c in range(n): new_arr[n-1-c][n-1-r] = tmp_arr[r][c] elif d % 4 == 3: # 270도 for r in range(n): for c in range(n): new_arr[n-1-c][r] = tmp_arr[r][c] else: for r in range(n): for c in range(n): new_arr[r][c] = tmp_arr[r][c] return new_arr
아실지 모르겠지만, return 으로 배열을 반환하니까 rotate()를 호출할때는 변수로 받아줘야 사용이 가능합니다
arr = rotate(tmp_arr, d)
이런식으로 해주세요!
그리고 d값에 따라 경우의 수가 존재하는데, 그렇기에 -90도, -180도도 가능하니 응용해서 사용하시면 좋습니다.
'알고리즘' 카테고리의 다른 글
[알고리즘] 로봇청소기 - bfs (2) 2024.03.07 [알고리즘 팁] x=y 대칭되는 값들을 찾아보자! (2) 2024.03.06 [프로그래머스] 수식 최대화 (0) 2023.07.21 [프로그래머스] 행렬의 곱셈 (0) 2023.07.18 [프로그래머스] 멀쩡한 사각형 (0) 2023.07.17