๐Ÿ“š Study/Baekjoon

[Gold V] 16926 - ๋ฐฐ์—ด ๋Œ๋ฆฌ๊ธฐ1

์œฐ๊ฐฑ 2025. 4. 27. 11:39

๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ 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 ≤ 108

์˜ˆ์ œ ์ž…๋ ฅ 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

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

5 4 7
1 2 3 4
7 8 9 10
13 14 15 16
19 20 21 22
25 26 27 28

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

28 27 26 25
22 9 15 19
16 8 21 13
10 14 20 7
4 3 2 1

์˜ˆ์ œ ์ž…๋ ฅ 3 ๋ณต์‚ฌ

2 2 3
1 1
1 1

์˜ˆ์ œ ์ถœ๋ ฅ 3 ๋ณต์‚ฌ

1 1
1 1

 


# ํ’€์ด ๋ฐฉ๋ฒ•

์ฒ˜์Œ์—๋Š” ๊ฐ ๋ฐ”์ด๋Ÿฌ์Šค์—์„œ ํผ์งˆ ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ ํ›„์— ๊ทธ๊ฒŒ ํฐ ๋ฐ”์ด๋Ÿฌ์Šค๋ฅผ ๋จผ์ € ๋ง‰๊ณ  ์ด๋Ÿฐ ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ค๋ณด๋‹ˆ ์–ด๋–ป๊ฒŒ ๊ธฐ์ค€์„ ์„ธ์›Œ์•ผํ• ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜๋‹ค..

์—ฌ๊ธฐ์„œ ์ƒ๊ฐํ•œ๊ฒŒ ๋ชจ๋“  ์ˆ˜๋ฅผ ๋‹ค ๊ณ ๋ คํ•ด์•ผ ํ•˜๋‚˜..? ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

combination์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ๊ตฌํ˜„ํ•ด๋ƒˆ๋‹ค.

๊ณ„์† ์ตœ์ ํ™”ํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ ์˜คํžˆ๋ ค ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋“œ๋ฅผ ๋†“์น˜์ง€ ์•Š์•˜๋‚˜

๋จผ์ € ์–ด๋–ป๊ฒŒ๋“  ์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ ์ตœ์ ํ™”๋ฅผ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณด์ž.


# ์ฝ”๋“œ

1. Layer-by-Layer ์ ‘๊ทผ์œผ๋กœ ์ „ํ™˜ํ•ด๋ผ

  • ๋ฐฐ์—ด์€ ๋ ˆ์ด์–ด ๋‹จ์œ„( ๋ฐ”๊นฅ ํ…Œ๋‘๋ฆฌ ์ „์ฒด)๋กœ ์ƒ๊ฐํ•œ๋‹ค.
  • ๊ฐ ๋ ˆ์ด์–ด๋Š” ์œ„/์˜ค๋ฅธ์ชฝ/์•„๋ž˜/์™ผ์ชฝ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฉํ–ฅ๋ณ„๋กœ ์ด๋™ ๊ทœ์น™์„ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ƒˆ ๋ฐฐ์—ด(new)์„ ๋งŒ๋“ค์–ด์„œ ์ถฉ๋Œ ์—†์ด ๊ฐ’์„ ์ด๋™์‹œํ‚จ๋‹ค.
  • ํ•„์š”ํ•œ ๋งŒํผ ํšŒ์ „ ๋ฐ˜๋ณตํ•œ๋‹ค.
# 2025-04-27 10:21-11:10
import sys
sys.stdin = open("input.txt","r")
def rotate_once(origin, N, M):
    new = [[0] * M for _ in range(N)]
    layers = min(N, M) // 2

    for layer in range(layers):
        # ์™ผ์ชฝ
        for i in range(layer, M - layer - 1):
            new[layer][i] = origin[layer][i + 1]
        # ์œ„์ชฝ
        for i in range(layer, N - layer - 1):
            new[i][M - layer - 1] = origin[i + 1][M - layer - 1]
        # ์˜ค๋ฅธ์ชฝ
        for i in range(M - layer - 1, layer, -1):
            new[N - layer - 1][i] = origin[N - layer - 1][i - 1]
        # ์•„๋ž˜์ชฝ
        for i in range(N - layer - 1, layer, -1):
            new[i][layer] = origin[i - 1][layer]
    
    return new

def rotate(origin, N, M, R):
    for _ in range(R):
        origin = rotate_once(origin, N, M)
    return origin

def main():
    N, M, R = map(int, input().split())
    origin = [list(map(int, input().split())) for _ in range(N)]
    result = rotate(origin, N, M, R)

    for row in result:
        print(*row)

main()

# ์ฐธ๊ณ  (๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฒŒ ์‹œ๋„ํ•œ ์ฒซ ํ’€์ด)

์™ผ/์•„๋ž˜/์˜ค/์œ„ ์ด๋ ‡๊ฒŒ ๋”ฐ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ–ˆ๊ณ  ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ๋„ ์—‰๋ง..

# 2025-04-27 10:21-11:10
import sys
sys.stdin = open("input.txt","r")

n, m, r = map(int,sys.stdin.readline().split())
graph = [list(map(int,sys.stdin.readline().split())) for _ in range(n)]
tmp = []

def go_left():
    sy = 1; ty = m-1
    for i in range(n):
        for j in range(sy+i,ty-i+1):
            graph[i][j-1] = graph[i][j]

def go_down():
    sx = n-2; tx = 0
    for j in range(m):
        for i in range(sx-j,tx+j-1,-1):
            if i == j:tmp.append((i,j,graph[i][j]))
            graph[i+1][j] = graph[i][j]

def go_right():
    sy = m-2; ty = 0
    for i in range(n-1,-1,-1):
        tmp_i = n - i
        for j in range(sy-tmp_i,ty+tmp_i-1,-1):
            graph[i][j+1] = graph[i][j]

def go_up():
    sx = 1; tx = n-1
    for j in range(m-1,-1,-1):
        tmp_j = m - j
        for i in range(sx+tmp_j,tx-tmp_j+1):
            graph[i-1][j] = graph[i][j]

def turn():
    diag = []
    for i in range(n):
        for j in range(m):
            if i == j:
                diag.append((i,j,graph[i][j]))

    go_left();go_down();go_right();go_up()

    for t in tmp:
        i,j,g = t
        graph[i+1][j] = g

def print_graph():
    for i in range(n):
        for j in range(m):
            print(graph[i][j], end=' ')
        print()

def main():
    for _ in range(r): turn()
    print_graph()

main()