[백준] 16935번 배열 돌리기3 파이썬
NxM 크기 배열.
R번 연산.
1번 : 상하 반전
2번 : 좌우 반점
3번 : 오른쪽으로 90 회전
4번 : 왼른쪽으로 90 회전
* 5 & 6번 연산 수행 시, N/2*M/2인 4개의 부분 배열로 나누어야 함.
5번 : 1->2 / 2->3 / 3->4 / 4->1
6번: 1->4 / 4->3 / 3->2 / 2->1
16935번 배열 돌리기3
n, m, r = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
operation = list(map(int, input().split()))
def cal1():
temp_board = [[0] * m for _ in range(n)]
for i in range(n):
temp_board[i] = board[n-1-i]
return temp_board
def cal2():
temp_board = [[0] * m for _ in range(n)]
for i in range(n):
for j in range(m):
temp_board[i][j] = board[i][m-1-j]
return temp_board
def cal3(board, n, m):
temp_board = [[0] * n for _ in range(m)]
for i in range(m):
for j in range(n):
temp_board[i][j] = board[n-1-j][i]
return temp_board
def cal4(board, n, m):
temp_board = [[0] * n for _ in range(m)]
for i in range(m):
for j in range(n):
temp_board[i][j] = board[j][m - 1 - i]
return temp_board
def cal5():
temp_board = [[0] * m for _ in range(n)]
#1->2
for i in range(n // 2):
for j in range(m // 2):
temp_board[i][j + m // 2] = board[i][j]
#2->3
for i in range(n // 2):
for j in range(m // 2, m):
temp_board[i + n // 2][j] = board[i][j]
#3->4
for i in range(n // 2, n):
for j in range(m // 2, m):
temp_board[i][j - m // 2] = board[i][j]
#4->1
for i in range(n // 2, n):
for j in range(m // 2):
temp_board[i - n // 2][j] = board[i][j]
return temp_board
def cal6():
temp_board = [[0] * m for _ in range(n)]
#1->4
for i in range(n // 2):
for j in range(m // 2):
temp_board[i + n // 2][j] = board[i][j]
#4->3
for i in range(n // 2, n):
for j in range(m // 2):
temp_board[i][j + m // 2] = board[i][j]
#3->2
for i in range(n // 2, n):
for j in range(m // 2, m):
temp_board[i - n // 2][j] = board[i][j]
#2->1
for i in range(n // 2):
for j in range(m // 2, m):
temp_board[i][j - m // 2] = board[i][j]
return temp_board
for oper in operation:
if oper == 1:
board = cal1()
elif oper == 2:
board = cal2()
elif oper == 3:
board = cal3(board, n, m)
n, m = m, n
elif oper == 4:
board = cal4(board, n, m)
n, m = m, n
elif oper == 5:
board = cal5()
else:
board = cal6()
for row in board:
print(*row)
1. 어디까지 고민을 했는가
1번 연산 : 행 그대로 두고 열만 이동
2번 연산 : 열 그대로 두고 행만 이동
2. 어디서 막혔는가
3번 연산 & 4번 연산 - 흠
5번 연산 & 6번 연산 - 어떻게 쪼개지..?
3. 어떻게 해결했는가
3번 연산 : n과 m을 바꿔서 적용. [a , b] -> [b , c]
4번 연산 : n과 m을 바꿔서 적용. [a , b] -> [c , b]
5번 연산 & 6번 연산 : 각 구간을 0~n//2, n//2~n, 0~m//2, m//2~m으로 쪼갠 후 이동.
출처 : https://www.acmicpc.net/problem/16935
16935번: 배열 돌리기 3
크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 →
www.acmicpc.net
참고 : https://ywtechit.tistory.com/169
[ 파이썬(python) ] 백준 16935 - 배열 돌리기 3
📍 백준 16935 - 배열 돌리기 3 백준 16935 - 배열돌리기 3 ⚡️ 나의 풀이 2차원배열을 상하 , 좌우 , 시계 방향으로 90도 회전 , 반시계 방향으로 90도 회전 , 부분 배열 시계방향 회전 , 부분 배열 반
ywtechit.tistory.com