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

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7

Change Developer

구현) 16926. 배열 돌리기 1
코딩 테스트/백준 강의 기초편

구현) 16926. 배열 돌리기 1

2021. 8. 16. 18:22

출처 : 

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

 

16926번: 배열 돌리기 1

크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]

www.acmicpc.net

모든 수를 k개의 그룹으로 나눈다.

import sys

input = sys.stdin.readline

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

a=[]

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

# 그룹의 개수는 n//2 과 m//2 중 최솟값
groupn = min(n//2,m//2)

groups = []

# 맨 마지막 수부터 첫 번째 수까지 거꾸로 넣는다.
for k in range(groupn):
    group=[]
    for j in range(k,m-k):
        group.append(a[k][j])
    for i in range(k+1,n-k-1):
        group.append(a[i][m-k-1])
    for j in range(m-k-1,k,-1):
        group.append(a[n-k-1][j])
    for i in range(n-k-1,k,-1):
        group.append(a[i][k])
    groups.append(group)

for k in range(groupn):
    group = groups[k]
    l = len(group)
    # k번째 그룹의 index는, 그룹의 총 개수인 l 보다 많이 회전하면 그것을 l로 나눈 나머지와 같이 회전한다.
    index = (r%l)
    # 총 l 개를 4개의 사이드에서 위에서 넣은 순서에 index를 더한 순서로 재배열한다.
    for j in range(k,m-k):
        a[k][j] = group[index]
        index = (index+1)%l
    for i in range(k+1,n-k-1):
        a[i][m-k-1] = group[index]
        index = (index + 1) % l
    for j in range(m-k-1,k,-1):
        a[n-k-1][j] = group[index]
        index = (index + 1) % l
    # 마지막 사이드를 채울 때, index를 l로 나눈 나머지가 0부터 시작되며, group의 첫 번째 숫자부터 삽입되어 완성된다.
    for i in range(n-k-1,k,-1):
        a[i][k] = group[index]
        index = (index + 1) % l

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
구현) 16935. 배열 돌리기 3  (0) 2021.08.16
    '코딩 테스트/백준 강의 기초편' 카테고리의 다른 글
    • 구현) 14891. 톱니바퀴
    • 수학) 4375. 1
    • 구현) 14499. 주사위 굴리기
    • 구현) 16935. 배열 돌리기 3
    Carnival7
    Carnival7

    티스토리툴바