문제풀이
NxN 배열에서 숫자 회전 - 2021/05/01
이호진
2021. 5. 1. 23:50
이 코드는 문제를 풀다가 단순히 이렇게해보면 어떨까하고 파이썬으로 한 번 구현해보았다.
예를 들어, 이렇게 숫자가 회전할 때, 배열을 채워넣는것이다.
위 그림에서는 오른쪽으로 3번 아래쪽으로 3번 왼쪽으로 3번 위로 2번 오른쪽으로 1번 이동한다.
4X4배열에서는 오른쪽 4번 아래쪽 4번 왼쪽 4번 위쪽 3번 오른쪽 3번 아래쪽 2번 왼쪽 2번 위쪽 1번 오른쪽 1번 이동한다.
이 규칙대로면 5X5배열에서는 오른쪽, 아래쪽, 왼쪽, 위쪽 순서로 [5,5,5,4,4,3,3,2,2,1,1]번 이동한다. 그리고 이 숫자들의 합은 당연히 N*N-1이다.
그래서 코드상으로 저 횟수만큼 U,R,L,D를 배열에 넣어놓고 그에따라 값을 1씩 증가시키면서 이동하면 배열이 완성된다.
n = int(input())
graph = [[0] * n for i in range(n)]
# 0으로 비어있는 배열을 선언
d = [n - 1] * 3
#n-1은 처음 3번반복됨
arr = [i for i in range(n - 2, 0, -1)]
#나머지는 1씩 감소하며 2번씩반복
d = d + arr + arr
#d배열=위에서만들었던 세번반복 + 두번씩반복
d.sort(reverse=True)
#역순으로 정렬 ex) [5,5,5,4,4,3,3,2,2,1,1]
idx = 0
result = []
#방향이 저장될 리스트
v = ['r', 'd', 'l', 'u']
#방향순서 (중요) 오른쪽, 아래쪽, 왼쪽, 위쪽으로
for i in d:
for j in range(i):
result.append(v[idx])
idx += 1
if idx == 4:
idx = 0
#idx를 증가시키면서 4가되면 0으로 교체
x = 0
y = 0
graph[x][y] = 1
#초기 graph[0][0]=1
temp = 2
#두번째값부턴 2가들어감
for i in result:
if i == 'r':
y += 1
elif i == 'd':
x += 1
elif i == 'l':
y -= 1
elif i == 'u':
x -= 1
graph[x][y] = temp
temp += 1
#돌아가면서 값을 1씩 증가하여 저장
뿌듯하다.