해당 문제를 확인하시고 싶으면 아래 링크를 통해 확인해주세요!
https://www.acmicpc.net/problem/17276
이번 문제 핵심인 부분 캡처했습니다.
결론은 이번문제를 해결하지 못했다.
사실 문제의 로직들은 전부 구현했지만 문제를 못푼 이유는 이전 데이터를 어디 임시저장소에 저장해야한다
를 생각하지 못했다.
입력으로 받은 2차원 배열에 직접 접근해서 위 사진의 로직들을 구현하면 문제에서 요구하는 바를 만족시킬 수 없다.
로직 순서가 있기 때문에 각 로직에서 저장해야 하는 데이터들을 1차원 배열에 임시로 저장해놓는 것이 가장 중요하다.
"""
백준 17276 (S2): 배열 돌리기
https://www.acmicpc.net/problem/17276
"""
def rotate(matrix, n, d):
rotate_count = abs(d) // 45 # 회전 횟수
for _ in range(rotate_count):
temp_list = []
if d > 0:
# (0) 주대각선 데이터 받아옴
for i in range(n):
temp_list.append(matrix[i][i])
# (1) 주대각선에서 가운데로 이동
for i in range(n):
temp_data = matrix[i][n//2] # 가운데 데이터
matrix[i][n//2] = temp_list[i] # temp_list에 저장되어있던 주대각선 데이터를 가운데로 이동시킴
temp_list[i] = temp_data # 가운데에 저장되어있던 데이터 temp_list에 저장
# (2) 가운데에서 부대각선으로
for i in range(n):
temp_data = matrix[i][n-1-i] # 부대각선 데이터
matrix[i][n-1-i] = temp_list[i] # temp_list에 저장되어있던 가운데 데이터를 부대각선으로 이동
temp_list[i] = temp_data # 부대각선 데이터 temp_list에 저장
# (3) 부대각선에서 가운데-가로로
for i in range(n):
temp_data = matrix[n//2][n-1-i] # 가운데-가로 데이터
matrix[n//2][n-1-i] = temp_list[i] # temp_list에 저장되어있던 부대각선 데이터를 가운데-가로로 이동
temp_list[i] = temp_data # 가운데-가로 데이터 temp_list에 저장
# (4) 가운데-가로에서 주대각선으로
for i in range(n):
matrix[n-1-i][n-1-i] = temp_list[i]
else:
# (0) 주대각선 데이터 받아옴
for i in range(n):
temp_list.append(matrix[i][i])
# (1) 주대각선에서 가운데-가로로 이동
for i in range(n):
temp_data = matrix[n//2][i] # 가운데-가로 데이터
matrix[n//2][i] = temp_list[i] # temp_list에 저장되어있던 주대각선 데이터를 가운데-가로로 이동시킴
temp_list[i] = temp_data # 가운데-가로에 저장되어있던 데이터 temp_list에 저장
# (2) 가운데-가로에서 부대각선으로
for i in range(n):
temp_data = matrix[n-1-i][i] # 부대각선 데이터
matrix[n-1-i][i] = temp_list[i] # temp_list에 저장되어있던 가운데-가로 데이터를 부대각선으로 이동
temp_list[i] = temp_data # 부대각선 데이터 temp_list에 저장
# (3) 부대각선에서 가운데-가로로
for i in range(n):
temp_data = matrix[n-1-i][n//2] # 가운데-가로 데이터
matrix[n-1-i][n//2] = temp_list[i] # temp_list에 저장되어있던 부대각선 데이터를 가운데-가로로 이동
temp_list[i] = temp_data # 가운데-가로 데이터 temp_list에 저장
# (4) 가운데-가로에서 주대각선으로
for i in range(n):
matrix[n-1-i][n-1-i] = temp_list[i]
return matrix
t = int(input()) # 테스트 케이스 수
for i in range(t):
n, d = map(int, input().split()) # n: 배열의 크기, d: 각도
matrix = [list(map(int, input().split(' '))) for _ in range(n)]
rotated_matrix = rotate(matrix, n, d) # 회전
for i in range(n):
for j in range(n):
print(rotated_matrix[i][j], end = ' ')
print()
임시로 어디에 저장해놔야한다는 개념만 알고 있었으면 이번 문제는 조금 쉽게 풀었을지도...ㅎ