3. 배열의 끝에 닿으면 현재 각도 정보에 따라 방향을 변경합니다.
따라서 충돌을 감지할 필요가 없어졌기 때문에 자동으로 과정 하나를 줄일 수 있습니다. 개발해야 할 과정 하나가 완전히 사라졌네요. 남은 것은 그저 방향 전환을 위해 각도(angle)에 따라 진행 방향을 더하고 빼기만 하면 됩니다.
4. 삼각형을 모두 채웠다면 배열을 1차원으로 만들어 정답을 제출합니다.
역시 앞의 코드와 동일하게 컴프리헨션을 사용하여 차원을 낮춰서 return하면 됩니다.
return [i for j in res for i in j]
전체 코드
3장/삼각_달팽이_최적화.py
def solution(n):
res = [[0] * i for i in range(1, n + 1)]
y, x = -1, 0
num = 1
for _ in range(n):
for j in range(i, n):
angle = i % 3
#순서대로 아래 -> 오른쪽 -> 위 (반시계 나선형)
if angle == 0: y += 1
elif angle == 1: x += 1
elif angle == 2: y -= 1; x -= 1
res[y][x] = num
num += 1
return [i for j in res for i in j]