Carnival7
Change Developer
Carnival7
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자바의 정석
    • 프로그래밍 언어별 tools
      • 파이썬
      • 자바
    • 코딩 테스트
      • 백준 강의 기초편
      • 백준 강의 연습편
      • 백준 강의 문제편
      • 삼성 기출
      • 백준 - 일반
      • 카카오 기출
      • 프로그래머스 - 일반
      • 코테 풀이 Tools
    • CS
      • Network
      • 운영체제
      • 알고리즘
      • DB
    • Web_Backend
      • Spring
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
      • 스프링 핵심 원리 - 기본편
    • DevOps
    • IT 업무 지식
      • 인프라
      • 클라우드
    • 자격증
      • AWS - CLF
      • 정처기 - 실기
    • 생각 정리

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩테스트 #삼성기출 #구현 #시뮬레이션
  • 스프링 #AOP
  • Github Actions
  • 스프링 부트 무중단 웹 서비스
  • ci/cd
  • 슬라이딩 윈도우 #덱
  • 프로그래머스 #카카오기출 #레벨2
  • nginx
  • 삼성기출 #백준강의문제편
  • 슬라이딩 윈도우
  • DevOps
  • 알고리즘 #백준강의기초편 #코딩테스트
  • 삼성기출 #2023 #상반기
  • 스프링 #인터셉터 #AOP #필터
  • DMZ
  • code deploy

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7

Change Developer

코딩 테스트/백준 강의 기초편

구현) 16935. 배열 돌리기 3

2021. 8. 16. 15:31

문제

 

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

 

16935번: 배열 돌리기 3

크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 →

www.acmicpc.net

 

풀이

import sys

input = sys.stdin.readline

n,m,r= map(int,input().split())

a=[]

for i in range(n):
    a.append(list(map(int,input().split())))

cmds = list(map(int,input().split()))

def op1(a):
    # 1번 연산
    n=len(a)
    m=len(a[0])
    b = list([0] * m for _ in range(n))  # a 모두에 0을 대신 채운 b. n 행 m 열
    for i in range(n):
        for j in range(m):
            # 상하 대칭으로 행을 바꾼다. : i = n-1-i
            next_i = (n-1) - i
            b[i][j] = a[next_i][j]
    return b

def op2(a):
    # 2번 연산
    n=len(a)
    m=len(a[0])
    b = list([0] * m for _ in range(n))  # a 모두에 0을 대신 채운 b. n 행 m 열
    for i in range(n):
        for j in range(m):
            # 좌우 대칭으로 열을 바꾼다. : j = m-1-j
            next_j = (m-1) - j
            b[i][j] = a[i][next_j]
    return b

def op3(a):
    # 90도 회전은 b를 n 행 m 열 -> m 행 n 열로
    # 3번 연산
    n=len(a)
    m=len(a[0])
    b = list([0] * n for _ in range(m))  # a 모두에 0을 대신 채운 b. m 행 n 열
    for i in range(m):
        for j in range(n):
            # 오른쪽으로 90도 회전시킨다.
            # 1) b[i][j] = a[][]
            # 2) b의 i번째 행 = a의 i번째 열 : b[i][j] = a[][i]
            # 3) b의 i번째 행의 j의 순서 = a의 i번째 열의 거꾸로순 : b[i][j] = a[n-1-j][i]
            b[i][j] = a[n-1-j][i]
    return b

def op4(a):
    # 90도 회전은 b를 n 행 m 열 -> m 행 n 열로
    # 4번 연산
    n=len(a)
    m=len(a[0])
    b = list([0] * n for _ in range(m))  # a 모두에 0을 대신 채운 b. m 행 n 열
    for i in range(m):
        for j in range(n):
            # 오른쪽으로 90도 회전시킨다.
            # 1) b[i][j] = a[][]
            # 2) b의 i번째 행 = a의 i번째 열 : b[i][j] = a[][i]
            # 3) b의 i번째 행의 j의 순서 = a의 i번째 열의 거꾸로순 : b[i][j] = a[n-1-j][i]
            b[i][j] = a[j][m-1-i]
    return b

def op5(a):
    # 5번 연산
    n=len(a)
    m=len(a[0])
    b = list([0] * m for _ in range(n))  # a 모두에 0을 대신 채운 b. m 행 n 열
    int_n = int(n/2)
    int_m = int(m/2)
    for i in range(int_n):
        for j in range(int_m):
            # 시계방향으로 1칸씩 이동
            # 1번 자리 기준으로 수행
            # 1 -> 2
            b[i][j+int_m] = a[i][j]
            # 2 -> 3
            b[i+int_n][j+int_m] = a[i][j+int_m]
            # 3 -> 4
            b[i+int_n][j] = a[i+int_n][j+int_m]
            # 4 -> 1
            b[i][j] = a[i+int_n][j]

    return b

def op6(a):
    # 6번 연산
    n=len(a)
    m=len(a[0])
    b = list([0] * m for _ in range(n))  # a 모두에 0을 대신 채운 b. m 행 n 열
    int_n = int(n/2)
    int_m = int(m/2)
    for i in range(int_n):
        for j in range(int_m):
            # 반시계방향으로 1칸씩 이동
            # 1번 자리 기준으로 수행
            # 2 -> 1
            b[i][j] = a[i][j+int_m]
            # 3 -> 2
            b[i][j+int_m] = a[i+int_n][j+int_m]
            # 4 -> 3
            b[i+int_n][j+int_m] = a[i+int_n][j]
            # 1 -> 4
            b[i+int_n][j] = a[i][j]
    return b

# 함수 배열을 만든다.
ops = [op1,op2,op3,op4,op5,op6]
for cmd in cmds:
    a = ops[cmd-1](a)

for row in a:
    print(*row,sep=' ')

'코딩 테스트 > 백준 강의 기초편' 카테고리의 다른 글

구현) 14503. 로봇 청소기  (0) 2021.08.20
구현) 14891. 톱니바퀴  (0) 2021.08.19
수학) 4375. 1  (0) 2021.08.16
구현) 14499. 주사위 굴리기  (0) 2021.08.16
구현) 16926. 배열 돌리기 1  (0) 2021.08.16
    '코딩 테스트/백준 강의 기초편' 카테고리의 다른 글
    • 구현) 14891. 톱니바퀴
    • 수학) 4375. 1
    • 구현) 14499. 주사위 굴리기
    • 구현) 16926. 배열 돌리기 1
    Carnival7
    Carnival7

    티스토리툴바