문제 링크 : https://www.acmicpc.net/problem/16926
문제 링크 : https://www.acmicpc.net/problem/16927
큰 어려움 없는 구현 문제로 deque의 rotate를 활용하여 풀이하였습니다.
우선 rotate를 쓰기 위해 돌릴 배열들을 lsts 리스트에 deque로 넣어주었습니다.
이후 각 deque들을 rotate해 준 뒤 알맞은 arr에서 알맞은 위치에 재배치 해주었습니다.
1번과 2번의 차이 R의 크기 차이인데 deque의 rotate를 사용하면 문제가 없습니다.
실제로 두 문제의 난이도나 제출 결과 메모리와 시간도 똑같습니다. ㄷㄷ
import sys
from collections import deque
N, M, R = map(int, sys.stdin.readline().rstrip().split())
arr = []
for _ in range(N):
arr.append(list(map(int, sys.stdin.readline().rstrip().split())))
cnt = min(N, M) // 2
lsts = [deque() for _ in range(cnt)]
for i in range(cnt):
lsts[i] += arr[i][i:M-i]
for j in range(i+1, N-i-1):
lsts[i].append(arr[j][M-i-1])
lsts[i] += arr[N-i-1][i:M-i][::-1]
for j in range(N-i-2, i, -1):
lsts[i].append(arr[j][i])
for i in range(cnt):
lsts[i].rotate(-R)
j = 0
arr[i][i] = lsts[i][j]
chng = [i, i+1]
while chng != [i, i]:
j += 1
arr[chng[0]][chng[1]] = lsts[i][j]
if chng[1] == i:
chng[0] -= 1
elif chng[0] == N-i-1:
chng[1] -= 1
elif chng[1] == M-i-1:
chng[0] += 1
elif chng[0] == i:
chng[1] += 1
else:
print('somthing wrong')
for line in arr:
print(*line)
'ALGO' 카테고리의 다른 글
[백준 BOJ] 174706 배열 돌리기 4 (python) (0) | 2024.06.27 |
---|---|
[백준 BOJ] 16935 17470 배열 돌리기 3, 5 (python) (1) | 2024.06.13 |
[프로그래머스] 아방가르드 타일링 (python) (0) | 2024.05.30 |
[백준 BOJ] 1385 벌집 (python) (0) | 2024.04.24 |
[백준 BOJ] 2873 롤러코스터 (python) (0) | 2023.05.11 |