프로그래머스의 자물쇠와 열쇠 문제가 있다. (-> 링크 <-)
이문제를 풀려 하는데 배열의 기본기가 부족해 기본적인 배열의 회전 이동을
해보고자 한다.
회전은 단순하다
3 X 3 배열
1 1 1
0 0 0
1 1 1 <- 이 있을 때
시계방향 회전을 하면
1 0 1
1 0 1
1 0 1 <- 이 될 것이다.
이동은 상하좌우 이동할 것이다
1 0 1
1 1 0
0 1 1 <-이걸 상으로 1칸 이동한다면
1 1 0
0 1 1
0 0 0 <-이 될 것이다.
import sys
import copy
size = int(input('사이즈를 입력해주세요 : '))
matrix = []
for i in range(size):
matrix.append(list(map(int, input().split())))
print('기존 matrix')
for i in range(size):
for j in range(size):
print(matrix[i][j], end = ' ')
print()
#시계방향회전 시키기
for k in range(3):
tmp = copy.deepcopy(matrix)
for i in range(size):
for j in range(size):
tmp[j][size-1-i] = matrix[i][j]
matrix = copy.deepcopy(tmp)
#출력
print('시계방향 ',k+1, '번 회전 후', end = '')
print()
for i in range(size):
for j in range(size):
print(matrix[i][j], end = ' ')
print()
#반시계방향회전 시키기
for k in range(3):
tmp = copy.deepcopy(matrix)
for i in range(size):
for j in range(size):
tmp[i][j] = matrix[j][size-1-i]
matrix = copy.deepcopy(tmp)
#출력
print('반시계방향', k+1, '번 회전 후', end = '')
print()
for i in range(size):
for j in range(size):
print(matrix[i][j], end = ' ')
print()
솔직히 처음 구현 했을 때 같은 방식으로 구현이 안되었지만
깊은 복사 deep copy를 사용하니 문제가 해결 되었다.
이동은 단순해 보이지 않는다
삽질을 많이했다 ㅠㅠㅠ
결국에는 직접 tmp배열 즉 옮겨졌을 때 결과물인 리스트를
순차적으로 차곡차곡 쌓아간게 덜 햇갈리고 잘 해결되었다.
import sys
import copy
size = int(input('사이즈를 입력해주세요 : '))
matrix = []
for i in range(size):
matrix.append(list(map(int, input().split())))
print('기존 matrix')
for i in range(size):
for j in range(size):
print(matrix[i][j], end = ' ')
print()
for ud in range(-size+1, size):
for lr in range(-size+1, size):
tmp = [[0] * size for _ in range(size)]
#위로 이동
if ud < 0:
for i in range(size):
for j in range(size):
#진짜 이동해야할 때
if(i <= size -1 + ud):
tmp[i][j] = matrix[i-ud][j]
#0으로 초기화 해줘야 할때
else:
tmp[i][j] = 0
#아래로 이동
else:
for i in range(size):
for j in range(size):
if(i >= ud):
tmp[i][j] = matrix[i-ud][j]
else:
tmp[i][j] = 0
#왼쪽으로 이동
if lr < 0:
for i in range(size):
for j in range(size):
if(j <= size - 1 + lr):
tmp[i][j] = tmp[i][j-lr]
else:
tmp[i][j] = 0
#오른쪽으로 이동
else:
for i in range(size):
for j in range(size):
if(j >= lr):
tmp[i][j] = tmp[i][j-lr]
else:
tmp[i][j] = 0
#출력
print('상하로', ud, '옆으로', lr, '이동!!!')
for i in range(size):
for j in range(size):
print(tmp[i][j], end = ' ')
print()