이런 식으로 시계 반대방향으로 숫자를 넣은 후
그 값을
배열로 나타내기
조금 복잡한 문제가 보이면 일단 배열에 어떻게 넣어 줄 지를 생각한다. 이 경우에는 위의 방식으로 보기를 바꿔서 생각했다.
방향은 총 세 가지가 보이는데 아래, 오른쪽, 대각선(좌상향) 이며 해당 순서로 바뀐다. 그런 방식으로 바꿔서 생각해줬다.
오우 신기한 것
[[1], [2, 12], [3, 13, 11], [4, 14, 15, 10], [5, 6, 7, 8, 9]]
의 식으로 전개된 값을 [1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9]
처럼 하나의 배열로 바꾸어 출력을 해야한다.
나는
a = []
for i in answer:
a.extend(i)
이런 식으로 answer 의 배열 하나하나를 extend 를 해줬는데
sum(answer,[])
이렇게 하면 바로 하나의 배열로 변환됐다.
이는,
sum(iterable,start)
# start: 초기값. default 는 0이다
sum 의 두 번째 start
변수를 이용해준 것. sum 의 두 번째 변수로 처음 시작 값을 넣어줄 수 있다. start = []
로 지정해줌으로써 []
에 answer
내의 배열들이 더해지게 되며 리스트를 return 하게 되는 것. sum 을 단순히 숫자 리스트의 값들을 더하는 데에만 이용하던 것을 더 효과적으로 이용할 수 있게 됐다.
direction 을 설정하는 데에 있어 좀 더 직관적이게 해보고자 딕셔너리를 써봤다. 반복을 위해서는 그냥 배열로 사용하는 게 효과적으로 보였다.
오호 근데
원래코드(오른쪽) 이 좀 더 시간은 덜 걸리는 것 같다.
처음 코드는 방향을 고려하여 x,y 의 range 를 하나 또는 0개를 검사하기 때문에 n 의 수가 더 많아지면 더 빠르게 작동하는 것 같다.