Algorithm/Python

[백준 16926] 배열 돌리기1, 2

🥭맹2 2021. 6. 7. 11:10

1. 문제

https://www.acmicpc.net/problem/16926

 

16926번: 배열 돌리기 1

크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]

www.acmicpc.net

https://www.acmicpc.net/problem/16927

 

16927번: 배열 돌리기 2

크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]

www.acmicpc.net

2. 접근 방법

구현인데용

 

ㅁ 이렇게 네모 테두리에서 위쪽, 오른쪽, 아래쪽, 왼쪽으로 나누어서

deque에 담고,

 

deque의 rotate를 사용해서 R만큼 옮겨주고

 

그 deque를 다시 board에 담습니다.

 

아이디어를 알면 쉽게 풀 수 있는데,

처음에 어떻게 구현할지 고민고민고민하는게 문제인 것 같습니다.

 

배열 돌리기1과 2는 문제가 거의 동일한데요,

입력되는 R 값의 범위만 다른 문제입니다.

 

제 풀이는 deque.rotate를 사용해서 R값의 범위의 변화에 큰 차이가 없어 동일한 코드로 풀이 할 수 있었습니다.

3. 코드

python

from collections import deque


def rotate_board(r):
    global N, M, board
    q = deque()
    _width, _height = M, N
    time = min(_width, _height) // 2
    nx, ny = 0, 0

    while time >= 1:
        for i in range(_width-1):
            q.append(board[ny][nx+i])
        for i in range(_height-1):
            q.append(board[ny+i][nx+_width-1])
        for i in range(_width-1):
            q.append(board[ny+_height-1][nx+_width-1-i])
        for i in range(_height-1):
            q.append(board[ny+_height-1-i][nx])

        q.rotate(-r)

        for i in range(_width-1):
            board[ny][nx+i] = q.popleft()
        for i in range(_height-1):
            board[ny+i][nx+_width-1] = q.popleft()
        for i in range(_width-1):
            board[ny+_height-1][nx+_width-1-i] = q.popleft()
        for i in range(_height-1):
            board[ny+_height-1-i][nx] = q.popleft()

        _width -= 2
        _height -= 2
        nx += 1
        ny += 1
        time = min(_width, _height) // 2


N, M, R = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
rotate_board(R)
for i in range(N):
    print(*board[i])

4. 마치며

마치며~!

'Algorithm > Python' 카테고리의 다른 글

[python] 17684 압축 - 카카오 2018 1차  (0) 2021.07.03
[백준 2798] 블랙잭  (2) 2021.06.25
[LeetCode] 39. Combination Sum  (0) 2021.06.07
[LeetCode] 200. Number of Islands  (0) 2021.06.07
[LeetCode] 232. Implement Queue using Stacks  (0) 2021.06.06