[Programmers] 삼각달팽이

김가영·2021년 1월 26일
0

Algorithm

목록 보기
32/78

문제

삼각달팽이

이런 식으로 시계 반대방향으로 숫자를 넣은 후
그 값을

배열로 나타내기

풀이

조금 복잡한 문제가 보이면 일단 배열에 어떻게 넣어 줄 지를 생각한다. 이 경우에는 위의 방식으로 보기를 바꿔서 생각했다.
방향은 총 세 가지가 보이는데 아래, 오른쪽, 대각선(좌상향) 이며 해당 순서로 바뀐다. 그런 방식으로 바꿔서 생각해줬다.

improve

sum(answer, [])

오우 신기한 것
[[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 을 단순히 숫자 리스트의 값들을 더하는 데에만 이용하던 것을 더 효과적으로 이용할 수 있게 됐다.

dir

direction 을 설정하는 데에 있어 좀 더 직관적이게 해보고자 딕셔너리를 써봤다. 반복을 위해서는 그냥 배열로 사용하는 게 효과적으로 보였다.

오호 근데

원래코드(오른쪽) 이 좀 더 시간은 덜 걸리는 것 같다.

처음 코드는 방향을 고려하여 x,y 의 range 를 하나 또는 0개를 검사하기 때문에 n 의 수가 더 많아지면 더 빠르게 작동하는 것 같다.

profile
개발블로그

0개의 댓글