백준 16935 파이썬

임규성·2022년 12월 24일
0
post-custom-banner

문제

링크 ->요기

해결 방법

단순히 구현을 해주면 되는 문제이다.
따라서 별 설명을 없을 것 같다.

하지만 걸린 시간도 단순(??)했다.
시간이 오래걸린 이유를 나열해보면

  1. 문제를 잘못 읽었다!!
  • 연산을 한번에 여러번 줄 수 있음을 못보고 1개씩만 준다고 인지했다.
  • 3번 4번 구역을 잘못 바꿔서 이해후 구현했다.
  1. 디테일한 부분에서의 실수!!
  • 배열을 돌린후에는 M과 N이 바뀌어야 되었다 왜냐하면 바꾸지않고 다음 아무 연산을 시도하면 실제 행의 길이를 담당하는 변수는 N이아닌 M으로 회전했기 때문이다.

정답 코드

import sys

def cal1():
  #새로운 배열공간 만들기
  temp = [[0]*M for _ in range(N)]
  #새로운 공간에 좌우 반전으로 복사
  for a in range(N):
    for b in range(M):
      temp[a][b] = arr[N-1-a][b]
  return temp
def cal2():
  #새로운 배열공간 만들기:
  temp = [[0]*M for _ in range(N)]
  #새로운 공간에 상하 반전으로 복사
  for b in range(M):
    for a in range(N):
      temp[a][b] = arr[a][M-1-b]
  return temp
def cal3():
  #새로운 배열 공간 만들어 주기
  temp = [[0]*N for i in range(M)]
  #새로운 공간에 오른쪽으로 90도 회전
  for a in range(M):
    for b in range(N):
      temp[a][b] = arr[N-1-b][a]
  return temp
def cal4():
  #새로운 배열 공간 만들어 주기
  temp = [[0]*N for i in range(M)]
  #새로운 공간에 왼쪽으로 90도 회전
  for a in range(M):
    for b in range(N):
      temp[a][b] = arr[b][M-1-a]
  return temp
def cal5():
    #새로운 배열공간 만들기:
    temp = [[0]*M for _ in range(N)]
    m = M // 2
    n = N // 2
    #1번을 2번 구역으로
    for a in range(n):
      for b in range(m, M):
        temp[a][b] = arr[a][b-m]
    #2번을 3번 구역으로
    for a in range(n,N):
      for b in range(m,M):
        temp[a][b] = arr[a-n][b]
    #3번을 4번 구역으로
    for a in range(n,N):
      for b in range(m):
        temp[a][b] = arr[a][b+m]
    #4번 구역을 1번 구역으로
    for a in range(n):
      for b in range(m):
        temp[a][b] = arr[a+n][b]
    return temp
def cal6():
  #새로운 배열공간 만들기:
  temp = [[0]*M for _ in range(N)]
  m = M // 2
  n = N // 2

  #4번을 3번 구역으로
  for a in range(n,N):
    for b in range(m, M):
      temp[a][b] = arr[a][b-m]
  #3번을 2번 구역으로
  for a in range(n):
    for b in range(m, M):
      temp[a][b] = arr[a+n][b]
  #2번을 1번 구역으로
  for a in range(n):
    for b in range(m):
      temp[a][b] = arr[a][b+m]
  #1번을 4번 구역으로
  for a in range(n, N):
    for b in range(m):
      temp[a][b] = arr[a-n][b]
  return temp
  
input = sys.stdin.readline
N, M, K = map(int, input().split())
#배열 입력 받기:
arr = [list(map(int, input().split())) for _ in range(N)]
calculations = list(map(int, input().split()))

for c in calculations:
  if c == 1:
    arr = cal1()
  elif c == 2:
    arr = cal2()
  elif c == 3:
    arr = cal3()
    N,M = M, N
  elif c == 4:
    arr = cal4()
    M,N = N, M
  elif c == 5:
    arr = cal5()
  elif c == 6:
    arr = cal6()

for i in arr:
  print(*i)
profile
삶의 질을 높여주는 개발자
post-custom-banner

0개의 댓글