시작이 반

[백준] 16926번번 (python 파이썬) 본문

알고리즘/백준

[백준] 16926번번 (python 파이썬)

G_Gi 2021. 3. 30. 22:06
SMALL

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

 

구현 문제이다.

 

문제의 그림처럼 그대로 풀었다.

여기서 겉의 사각형부터 맨 안쪽의 사각형까지 몇번 들어가야 하는지 고민했는데

제한 조건에 min(N, M) mod 2 = 0 이란 조건이 있었다.

즉 min(N, M)를 2로 나눈 값만큼 안으로 들어가면된다.

 

배열을 돌리는 방법은 

바꿀 좌표를 계산하고 그 좌표의 값을 저장해놓고 이전 좌표의 값을 계산된 좌표의 값에 넣는 식으로 계산하였다.

 

 

 

이러한 순서로 계산하였다.

 

 

하나의 사각형을 다 돌렸으면 안쪽 사각형으로 들어간다.

 

n, m, r = map(int, input().split(' '))
graph = [list(map(int, input().split(' '))) for _ in range(n)]

for _ in range(r):
    for i in range(min(n, m) // 2):
        s_x, s_y = i, i
        s_value = graph[s_x][s_y]

        for j in range(i + 1, n - i):  #좌
            s_x = j
            prev_value = graph[s_x][s_y]
            graph[s_x][s_y] = s_value
            s_value = prev_value

        for j in range(i + 1, m - i):  #하
            s_y = j
            prev_value = graph[s_x][s_y]
            graph[s_x][s_y] = s_value
            s_value = prev_value

        for j in range(i + 1, n - i):  #우
            s_x = n - j - 1
            prev_value = graph[s_x][s_y]
            graph[s_x][s_y] = s_value
            s_value = prev_value

        for j in range(i + 1, m - i):  #상
            s_y = m - j -1
            prev_value = graph[s_x][s_y]
            graph[s_x][s_y] = s_value
            s_value = prev_value

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

 

LIST