티스토리 뷰

반응형

이 문제는 정말 상하/좌우 반전과 시계/반시계 방향 회전의 끝판왕인것 같다..

다시 풀라고 해도 다시 풀 자신이 없는데 적어도 일주일 지나고 다시 풀어봐야할 것 같다 ㅠㅠ

import sys
input = sys.stdin.readline

def flip1(l):
    new_matrix = [row[:] for row in matrix]
    for i in range(0,2**N,2**l):
        for j in range(0,2**N,2**l):
            for r in range(2**l):
                for c in range(2**l):
                    new_matrix[i+r][j+c] = matrix[i+2**l-r-1][j+c]
    return new_matrix

def flip2(l):
    new_matrix = [row[:] for row in matrix]
    for i in range(0,2**N,2**l):
        for j in range(0,2**N,2**l):
            for r in range(2**l):
                for c in range(2**l):
                    new_matrix[i+r][j+c] = matrix[i+r][j+2**l-c-1]
    return new_matrix

def rotate90(l):
    new_matrix = [row[:] for row in matrix]
    for i in range(0,2**N,2**l):
        for j in range(0,2**N,2**l):
            for r in range(2**l):
                for c in range(2**l):
                    new_matrix[i+r][j+c] = matrix[i+2**l-c-1][j+r]
    return new_matrix

def rotate_90(l):
    new_matrix = [row[:] for row in matrix]
    for i in range(0,2**N,2**l):
        for j in range(0,2**N,2**l):
            for r in range(2**l):
                for c in range(2**l):
                    new_matrix[i+r][j+c] = matrix[i+c][j+2**l-r-1]
    return new_matrix

def big_flip1(l):
    new_matrix = [row[:] for row in matrix]
    for i in range(0,2**N,2**l):
        for j in range(0,2**N,2**l):
            for r in range(2**l):
                for c in range(2**l):
                    new_matrix[i+r][j+c] = matrix[2**N-2**l-i+r][j+c]
    return new_matrix

def big_flip2(l):
    new_matrix = [row[:] for row in matrix]
    for i in range(0,2**N,2**l):
        for j in range(0,2**N,2**l):
            for r in range(2**l):
                for c in range(2**l):
                    new_matrix[i+r][j+c] = matrix[i+r][2**N-2**l-j+c]
    return new_matrix

def big_rotate90(l):
    new_matrix = [row[:] for row in matrix]
    for i in range(0,2**N,2**l):
        for j in range(0,2**N,2**l):
            for r in range(2**l):
                for c in range(2**l):
                    new_matrix[i+r][j+c] = matrix[2**N-2**l-j+r][i+c]
    return new_matrix

def big_rotate_90(l):
    new_matrix = [row[:] for row in matrix]
    for i in range(0,2**N,2**l):
        for j in range(0,2**N,2**l):
            for r in range(2**l):
                for c in range(2**l):
                    new_matrix[i+r][j+c] = matrix[j+r][2**N-2**l-i+c]
    return new_matrix

N, R = map(int, input().split())
matrix = [input().split() for _ in range(2**N)]
for _ in range(R):
    K, L = map(int, input().split())
    if K == 1:
        matrix = flip1(L)
    elif K == 2:
        matrix = flip2(L)
    elif K == 3:
        matrix = rotate90(L)
    elif K == 4:
        matrix = rotate_90(L)
    elif K == 5:
        matrix = big_flip1(L)
    elif K == 6:
        matrix = big_flip2(L)
    elif K == 7:
        matrix = big_rotate90(L)
    elif K == 8:
        matrix = big_rotate_90(L)
for row in matrix:
    print(*row)
반응형

'IT > Python' 카테고리의 다른 글

[코드트리] 예술성 - 파이썬  (0) 2023.09.13
[코드트리] 술래잡기 - 파이썬  (0) 2023.09.13
[백준] 14503 로봇청소기 - 파이썬  (0) 2023.09.12
퀵 정렬 / 병합 정렬  (0) 2023.09.12
[Python] M1 Mac에서 Konlpy 오류  (0) 2022.10.04
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함