풀이
- pypy로 제출해서 겨우겨우 시간을 맞춘듯한 코드...
- 진짜 꾸역꾸역 올라가는거 보고 숨 참고 지켜보느라 힘들었다...
- 우선 보기에서 나온 것처럼 각 구역별 테두리가 있을 텐데
- 해당 테두리끼리 회전 수에 맞게 회전을 한 결과를 출력하면 된다.
- 그래서 주어진 n과 m 중 작은 수의 값에 2를 나눈 몫으로 테두리의 개수를 체크
- 이후 i,i 로부터 테두리를 한 바퀴 쭉 돌아다니면서
- tmp 값을 현재 arr에 담아주고
- 현재 arr 값을 tmp에 담아주어 교체하는 식으로 해결
- 탐색을 하기 위한 조건 분기는 아래의 주석으로 체크
import sys
input = sys.stdin.readline
n,m,c = map(int,input().split())
arr = [list(map(int,input().rstrip('\n').split())) for _ in range(n)]
for i in range(min(n,m)//2):
for _ in range(c):
stack = [[i,i]]
ch, tmp = 0, 0
while ch != 2:
y,x = stack.pop()
if (y,x) == (i,i):
ch += 1
if ch == 2:
arr[y][x],tmp = tmp, arr[y][x]
break
arr[y][x],tmp = tmp, arr[y][x] # 값 변경
# 좌측 상단에서 좌측 하단 전까지
if x == i and i<=y<n-1-i: stack.append([y+1,x])
# 좌측 하단에서 우측 하단 전까지
elif i<=x<m-i-1 and y == n-i-1: stack.append([y,x+1])
# 우측 하단에서 우측 상단 전까지
elif x == m-i-1 and i<y<=n-1-i: stack.append([y-1,x])
# 우측 상단에서 좌측 상단 전까지
else: stack.append([y,x-1])
[print(*i) for i in arr]
'알고리즘' 카테고리의 다른 글
[백준, 파이썬, 18311번] 왕복 (0) | 2023.09.12 |
---|---|
[백준, 파이썬, 1032번] 명령 프롬프트 (0) | 2023.09.11 |
[백준, 파이썬, 2231번] 분해합 (0) | 2023.09.08 |
[백준, 파이썬, 1463번] 1로 만들기 (0) | 2023.09.07 |
[백준, 파이썬, 1254번] 팰린드롬 만들기 (0) | 2023.09.06 |