728x90
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
n,m,r=map(int,input().split())
arr = [list(map(int, input().split())) for _ in range(n)]
operation = list(map(int, input().split()))
def calc_1():
temp=[ [0] * m for _ in range(n)]
for i in range(n):
temp[i] = arr[n-1-i]
return temp
def calc_2():
temp=[ [0] * m for _ in range(n)]
for i in range(n):
for j in range(m):
temp[i][j]=arr[i][m-1-j]
return temp
def calc_3(arr,n,m):
temp=[ [0]*n for _ in range(m) ]
for i in range(m):
for j in range(n):
temp[i][j]=arr[n-1-j][i]
return temp
def calc_4(arr,n,m):
temp=[ [0]*n for _ in range(m) ]
for i in range(m):
for j in range(n):
temp[i][j]=arr[j][m-1-i]
return temp
def calc_5():
temp=[[0]*m for _ in range(n)]
for i in range(n//2):
for j in range(m//2):
temp[i][j+m//2]=arr[i][j]
for i in range(n//2):
for j in range(m//2,m):
temp[i+n//2][j] = arr[i][j]
for i in range(n//2,n):
for j in range(m//2,m):
temp[i][j-m//2]=arr[i][j]
for i in range(n//2,n):
for j in range(m//2):
temp[i-n//2][j] = arr[i][j]
return temp
def calc_6():
temp=[[0]*m for _ in range(n)]
for i in range(n//2):
for j in range(m//2):
temp[i+n//2][j]=arr[i][j]
for i in range (n//2,n):
for j in range(m//2):
temp[i][j+m//2]=arr[i][j]
for i in range(n//2,n):
for j in range(m//2,m):
temp[i-n//2][j]=arr[i][j]
for i in range(n//2):
for j in range(m//2,m):
temp[i][j-m//2]=arr[i][j]
return temp
for oper in operation:
if oper == 1:
arr = calc_1()
elif oper == 2:
arr = calc_2()
elif oper == 3:
arr = calc_3(arr,n,m)
n, m = m, n
elif oper == 4:
arr = calc_4(arr,n,m)
n, m = m, n
elif oper == 5:
arr = calc_5()
else:
arr = calc_6()
for i in arr:
print(*i)
단순 구현으로 풀었습니다.
연산의 결과를 담을 리스트를 temp라고 설정했고
반복문을 작성할 때 범위의 기준을 temp가 아닌 arr로 잡으면 계산하기 편하다고 생각했습니다.
1번 연산과 2번 연산의 경우는 설명을 생략하겠습니다.
3번과 4번 연산의 경우 n과 m이 같지 않을 때를 고려해줘야 합니다. 배열의 모양이 달라지기 때문입니다.
3,4번 연산은 끝난 후에 다른 연산에서 범위를 맞추기 위해 다시 n과 m을 조정해야 합니다.
5,6번 연산은 헷갈릴 수 있지만 범위를 arr 배열을 기준으로 잡으면 쉽게 짤 수 있습니다.
3번 그룹에서 4번 그룹으로 가는 경우, arr의 i와 j이 속한 부분을 기준으로 잡고 temp에 값을 대입할 때 간단한 연산만 해주면 됩니다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[BOJ/Python3(파이썬)] 백준 5598번 : 카이사르 암호 (0) | 2022.05.14 |
---|---|
[BOJ/Python3(파이썬)] 백준 14499번: 주사위 굴리기 (0) | 2022.05.13 |
[BOJ/Python3(파이썬)] 백준 2745번: 진법 변환 (0) | 2022.01.17 |
[정렬] 백준 10825번 : 국영수(BOJ, Python, 파이썬) (0) | 2022.01.12 |
[문자열] 백준 10808번: 알파벳 개수(BOJ, Python, 파이썬), ord함수 (0) | 2022.01.11 |