728x90
https://www.acmicpc.net/problem/16926
제한 조건에 min(n,m) % 2 == 0 이라고 표시되어 있다 이를 활용해서 바깥쪽 직사각형에서 안쪽 직사각형을 확인한다.
확인하는 순서는 맨 좌측 , 하단, 우측, 상단이다. 그래서 맨 좌측의 지점이 되는 i,i을 시작지점이라고 보고, 좌표와 이때 array[i][i] 의 값을 미리 저장해 둔다.
바꿀 좌표로 이동해서, 바꿀좌표에 있는 값을 temp 변수에 저장해 놓는다
그리고 현재 확인중인 좌표에 이전 값을 넣어준다 : array[x][y] = value
value 값을 temp에 저장해둔 값으로 갱신한다.
n, m, r = map(int, input().split(' '))
array = []
for i in range(n):
data = list(map(int, input().split(' ')))
array.append(data)
# r 회 회전하기
for _ in range(r):
for i in range(min(n, m)//2):
x, y = i, i # 맨 처음 좌표 지점
value = array[x][y] # 맨 처음 좌표가 가진 값
# 확인방향 맨 좌측 -> 하단 -> 우측 -> 상
for j in range(i+1, n-i): # left
x = j
temp = array[x][y] # 현재 좌표의 값, 바꿀 예정
array[x][y] = value # 현재 좌표에 이전 값을 넣어준다
value = temp # 이전 값으로 갱신하기
for j in range(i+1, m-i): # down
y = j
temp = array[x][y]
array[x][y] = value
value = temp
for j in range(i+1, n-i): # right
x = n - j - 1 # -1 을 해줘야 함 왜냐면 그 이전에 좌표는 예를들어서 n = m = 4 이면 (3,3) 임
temp = array[x][y] # -1을 해줘야 예전값을 넣을 그 다음 칸을 가리킬 수 있음
array[x][y] = value
value = temp
for j in range(i+1, m-i): # top
y = n - j - 1
temp = array[x][y]
array[x][y] = value
value = temp
for i in range(n):
for j in range(m):
print(array[i][j], end=' ')
print()
728x90
'Algorithm (PS)' 카테고리의 다른 글
카카오 주차요금계산 Python (0) | 2022.09.26 |
---|---|
[백준] 14382번 숫자세는 양 Python (1) | 2022.09.26 |
kakao 두 큐 합 같게 만들기 Python (3) | 2022.09.24 |
[백준[ 17609 회문 Python 풀이와 반례 (1) | 2022.09.23 |
백준 1697 숨바꼭질 Python (1) | 2022.09.22 |