[백준] 16926(파이썬) - 배열 돌리기 1

resilient

·

2021. 7. 28. 15:26

728x90
반응형

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

  • 이 문제는 간단한 구현 문제였다.
  • 배열을 돌리거나 할 때 중요한 점은 하나의 temp 변수를 만들어주고 처음 시작할 때 값을 넣어준 뒤, 배열을 돌리다 보면 비어있는 배열이 생기는데 그때 temp변수 안에 저장해두었던 값을 빈 배열에 넣어주면 된다.
  • 까다로웠던 점은 안에 있는 배열도 돌려줘야 하기 때문인데 n과 m 중에 작은 값은 2로 나눠준 값 만큼 for문을 돌려서 가장자리부터 안에 있는 배열까지 돌려주는 방식으로 구현했다.
  • 이 문제는 코드를 보면 바로 이해가 간다.
import sys
input = sys.stdin.readline

n,m,r = map(int,input().split())

data = [list(map(int,input().split())) for _ in range(n)]

for _ in range(r):
    for i in range(min(n, m) // 2):
    	# x, y 는 돌려지는 배열중 가장 첫번째 배열 인덱스
        x, y = i, i
        temp = data[x][y]
                            # 안쪽까지 계속 고려해야하기 때문에 n-i랑 m-i까지로 범위설정
        for j in range(i + 1, n - i):  #좌
            x = j
            prev_value = data[x][y]
            data[x][y] = temp
            temp = prev_value

        for j in range(i + 1, m - i):  #하
            y = j
            prev_value = data[x][y]
            data[x][y] = temp
            temp = prev_value

        for j in range(i + 1, n - i):  #우
            x = n - j - 1
            prev_value = data[x][y]
            data[x][y] = temp
            temp = prev_value

        for j in range(i + 1, m - i):  #상
            y = m - j -1
            prev_value = data[x][y]
            data[x][y] = temp
            temp = prev_value

for i in range(n):
    for j in range(m):
        print(data[i][j], end=' ')
    print()

 

반응형