[백준] 16935 배열 돌리기 3

오혜수·2022년 3월 3일
0

코딩 테스트

목록 보기
15/61

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

런타임 에러 지옥...

풀이

런타임 에러

import sys
input = sys.stdin.readline

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

def _1(graph):
    graph = graph[::-1]
    return graph

def _2(graph):
    for i in range(n):
        graph[i] = graph[i][::-1]
    return graph

def _3(graph):
    graph_3 = []
    for i in range(len(graph[0])):
        li = []
        for j in range(len(graph)-1,-1,-1):
            li.append(graph[j][i])
        graph_3.append(li)
    graph = graph_3
    return graph

def _4(graph):
    graph_4 = []
    for i in range(len(graph[0])-1,-1,-1):
        li = []
        for j in range(len(graph)):
            li.append(graph[j][i])
        graph_4.append(li)
    graph = graph_4
    return graph

def _5(graph):
    graph_5 = []
    li_1, li_2, li_3, li_4 = [], [], [], []
    for i in range(n):
        if i < n//2:
            li_1.append(graph[i][:m//2])
            li_2.append(graph[i][m//2:])
        else:
            li_4.append(graph[i][:m//2])
            li_3.append(graph[i][m//2:])


    for i in range(len(li_4)):
        li = []
        for j in range(len(li_4[0])):
            li.append(li_4[i][j])
        for j in range(len(li_1[0])):
            li.append(li_1[i][j])
        graph_5.append(li)

    for i in range(len(li_4)):
        lii = []
        for j in range(len(li_4[0])):
            lii.append(li_3[i][j])
        for j in range(len(li_1[0])):
            lii.append(li_2[i][j])
        graph_5.append(lii)
    graph = graph_5
    return graph

def _6(graph):
    graph_6 = []
    li_1, li_2, li_3, li_4 = [], [], [], []
    for i in range(n):
        if i < n//2:
            li_1.append(graph[i][:m//2])
            li_2.append(graph[i][m//2:])
        else:
            li_4.append(graph[i][:m//2])
            li_3.append(graph[i][m//2:])


    for i in range(len(li_2)):
        li = []
        for j in range(len(li_2[0])):
            li.append(li_2[i][j])
        for j in range(len(li_1[0])):
            li.append(li_3[i][j])
        graph_6.append(li)

    for i in range(len(li_2)):
        lii = []
        for j in range(len(li_2[0])):
            lii.append(li_1[i][j])
        for j in range(len(li_1[0])):
            lii.append(li_4[i][j])
        graph_6.append(lii)
    graph = graph_6
    return graph

for i in a:
    if i == 1:
        graph = _1(graph)
    elif i==2:
        graph = _2(graph)
    elif i == 3:
        graph = _3(graph)
    elif i == 4:
        graph = _4(graph)
    elif i == 5:
        graph = _5(graph)
    else:
        graph = _6(graph)


for k in graph:
    print(*k)

다른 풀이 - 런타임 에러

import sys
input = sys.stdin.readline

def _1(graph):
    graph = graph[::-1]
    return graph

def _2(graph):
    for i in range(n):
        graph[i] = graph[i][::-1]
    return graph

def _3(graph):
    graph = [list(row)[::-1] for row in zip(*graph)]
    return graph

def _4(graph):
    graph = [list(row) for row in list(zip(*graph))[::-1]]
    return graph

def _5(graph):
    copy_graph = [[0]*m for _ in range(n)]
    half_n = n//2
    half_m = m//2

    for i in range(half_n):
        for j in range(half_m):
            copy_graph[i][half_m + j] = graph[i][j]

    for i in range(half_n):
        for j in range(half_m, m):
            copy_graph[half_n + i][j] = graph[i][j]

    for i in range(half_n, n):
        for j in range(half_m, m):
            copy_graph[i][j - half_m] = graph[i][j]

    for i in range(half_n, n):
        for j in range(half_m):
            copy_graph[i - half_n][j] = graph[i][j]

    return copy_graph

def _6(graph):
    copy_graph = [[0] * m for _ in range(n)]
    half_n = n // 2
    half_m = m // 2

    for i in range(half_n):
        for j in range(half_m):
            copy_graph[half_n + i][j] = graph[i][j]

    for i in range(half_n):
        for j in range(half_m, m):
            copy_graph[i][j - half_m] = graph[i][j]

    for i in range(half_n, n):
        for j in range(half_m, m):
            copy_graph[i - half_n][j] = graph[i][j]

    for i in range(half_n, n):
        for j in range(half_m):
            copy_graph[i][half_m + j] = graph[i][j]

    return copy_graph


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

for i in a:
    if i == 1:
        graph = _1(graph)
    elif i==2:
        graph = _2(graph)
    elif i == 3:
        graph = _3(graph)
    elif i == 4:
        graph = _4(graph)
    elif i == 5:
        graph = _5(graph)
    else:
        graph = _6(graph)


for k in graph:
    print(*k)


0개의 댓글