[ProblemSolving] 백준 - 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]
   ↓         ↓                   ↑         ↑
A[3][1]   A[3][2] → A[3][3] → A[3][4]   A[3][5]
   ↓                                       ↑
A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5]

예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다.

1 2 3 4       2 3 4 8       3 4 8 6
5 6 7 8       1 7 7 6       2 7 8 2
9 8 7 6   →   5 6 8 2   →   1 7 6 3
5 4 3 2       9 5 4 3       5 9 5 4
 <시작>         <회전1>        <회전2>

배열과 정수 R이 주어졌을 때, 배열을 R번 회전시킨 결과를 구해보자.

입력


첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다.

둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.

출력


입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.

제한


2 ≤ N, M ≤ 300
1 ≤ R ≤ 1,000
min(N, M) mod 2 = 0
1 ≤ Aij ≤ 10^8

예제 입력1

4 4 2
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

예제 출력1

3 4 8 12
2 11 10 16
1 7 6 15
5 9 13 14

나의 풀이


배열을 r만큼 반시계 방향으로 돌리는 문제다.
제한 조건에서 min(N, M) mod 2 = 0은 가장 작은 값이 항상 2의 배수란 의미.. 3x4 라면 회전불가한 부분이 생긴다.

코드 순서

  1. 테두리 개수 세기 -> cnt = min(n,m) //2
  2. 반복문을 통해 테두리 개수 만큼 회전한다.
    • 회전 시작하는 지점은 다른 변수에 저장
    • 다른 곳은 반시계 방향 회전
    • 회전 시작 지점 회전 반영

코드


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

def solution():
    
    for _ in range(r):
        rotate()
    for i in graph:
        for j in i:
            print(j, end=" ")
        print()
        
 # 5 * 4            
def rotate():
    cnt = min(n,m) // 2 # 2 
    for i in range(cnt): # (0, 1)
        nn = n- i -1 # 5 -1 = 4
        mm = m -i -1 # 4- 1 =3
        start = graph[i][i] # 
        # 위쪽 가로 : 왼 <- 오
        for j in range(i , mm):
            graph[i][j] = graph[i][j+1]
        # 오른쪽 세로 : 아래 <- 위
        for j in range(i, nn):
            graph[j][mm] = graph[j+1][mm]
        # 아래쪽 가로 : 왼 -> 오
        for j in range(mm, i, -1):
            graph[nn][j] = graph[nn][j-1]
        # 왼쪽 세로 : 위 -> 아래
        for j in range(nn, i, -1):
            graph[j][i] = graph[j-1][i]
        graph[i+1][i] = start 
solution()   

좋은 웹페이지 즐겨찾기