ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ 알고리즘 TIP ] 2차원 배열 회전
    알고리즘 2024. 2. 20. 10:01
    728x90

    여러 문제에서 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도도 가능하니 응용해서 사용하시면 좋습니다.

Designed by Tistory.