본문 바로가기

알고리즘/백준

[백준]16927 배열 돌리기2(Python)

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

 

문제 접근

 

우선, 규칙성을 찾아서 반복문 내에 조건식을 작성해야겠다고 생각했다. 

행과 열이 동시에 바뀌는 경우는 존재하지x

 

1. j = 0, i ≠ N-1 인 경우: 행이 아래로 이동 열은 고정  

     i => i + 1     j => j

2. j = 0, i = N-1 인 경우: 열이 오른쪽으로 이동

     i => i            j => j+1

3.  j = M-1, i ≠ 0 인 경우: 행이 로 이동 열은 고정

     i => i - 1      j => j

4. j = M-1, i = 0 인 경우: 열이 왼쪽으로 이동

     i => i            j => j-1

 

내가 놓친 부분...?

껍데기랑 안쪽이 같이 돌아가는데 그 부분을 간과함...

 

코드 
import sys

input = sys.stdin.readline

# N X M 배열, 배열은 반시계 방향으로 회전
N, M, R = map(int, input().split())

arr = []

for _ in range(N):
    row = list(map(int, input().split()))
    arr.append(row)

# print(arr)

for _ in range(R):
    for i in range(N):
        for j in range(M):
            if j == 0:
                if i != N-1:
                    arr[i][j] = arr[i+1][j]
                else:
                    arr[i][j] = arr[i][j+1]
            elif j == M-1:
                if i != 0:
                    arr[i][j] = arr[i-1][j]
                else:
                    arr[i][j] = arr[i][j-1]

print(arr)