[백준 구현] 배열 돌리기 3(python)

이진규·2022년 9월 5일
1

백준(PYTHON)

목록 보기
102/115

문제

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

나의 코드

"""

"""

from sys import stdin
input = stdin.readline

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

def cal_1():
    for i in range(n // 2):
        pan[i], pan[n - i - 1] = pan[n - i - 1], pan[i]

def cal_2():
    for i in range(m // 2):
        for j in range(n):
            pan[j][i], pan[j][m - i - 1] = pan[j][m - i - 1], pan[j][i]

def cal_3(n, m):
    tmp = []
    for i in range(m):
        tmp2 = []
        for j in range(n):
            tmp2.append(pan[n - j - 1][i])
        tmp.append(tmp2)
    return tmp

def cal_4(n, m):
    tmp = []
    for i in range(m):
        tmp2 = []
        for j in range(n):
            tmp2.append(pan[j][m - i - 1])
        tmp.append(tmp2)
    return tmp

while ope:
    o = ope.pop(0)

    if o == 1:
        cal_1()

    elif o == 2:
        cal_2()

    elif o == 3:
        pan = cal_3(n, m)
        n, m = m, n

    elif o == 4:
        pan = cal_4(n, m)
        n, m = m, n

    elif o == 5:
        tmp = [ [0] * m for _ in range(n) ]

        for i in range(n//2):
            for j in range(m//2):
                tmp[i][j+m//2] = pan[i][j]
        for i in range(n//2):
            for j in range(m//2, m):
                tmp[i+n//2][j] = pan[i][j]
        for i in range(n//2, n):
            for j in range(m//2, m):
                tmp[i][j-m//2] = pan[i][j]
        for i in range(n//2, n):
            for j in range(m//2):
                tmp[i-n//2][j] = pan[i][j]

        pan = tmp

    elif o == 6:
        tmp = [ [0] * m for _ in range(n) ]

        for i in range(n//2):
            for j in range(m//2):
                tmp[i+n//2][j] = pan[i][j]
        for i in range(n//2, n):
            for j in range(m//2):
                tmp[i][j+m//2] = pan[i][j]
        for i in range(n//2, n):
            for j in range(m//2, m):
                tmp[i-n//2][j] = pan[i][j]
        for i in range(n//2):
            for j in range(m//2, m):
                tmp[i][j-m//2] = pan[i][j]

        pan = tmp

for i in pan:
    print(*i)

    

설명

문제에 주어진 대로 풀면 되는데 3, 4의 경우 조금 헷갈린다.
만약 n != m인 경우에는 90도 회전을 하게 되면 n, m이 서로 바뀌기 때문에
n, m = m, n 해주는 부분도 꼭 해줘야 한다.

참고 자료

https://ywtechit.tistory.com/169

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글