반 시계 방향으로 숫자가 채워지는 것을 이용 해서,2중 배열
을 만들어야 한다.
일단, n
개가 주어지면,
n
만큼 숫자가 아래로
채워진다.
n-1
만큼 숫자가 오른쪽
으로 채워진다.
n-2
만큼 숫자가 왼쪽 위로
채워진다.
1~3 의 과정을 n이 0이 될 때 까지 반복한다.
이 3가지
패턴을 이용해서 원하는 위치에 숫자를 넣는 반복문
을 구현 해야한다.
- `n번 숫자를 넣을 때`, `아래`로
- `n-1 숫자를 넣을 때`, `오른쪽` 으로
- `n-2 숫자를 넣을 때`, `왼쪽 위`로
- `n-3 숫자를 넣을 때`, `아래`로 ⋯
먼저 , n번, n-1번, n-2번, ⋯, 0번
숫자를 넣는 반복문은 아래와 같이 만들 수 있다.
for i in range(n):
for j in range(i, n):
# i 가 0일 때, n번
# i 가 1일 때, n - 1번
# ⋯
# i 가 n-1일 때, 0번
그럼 i
를 시계가 방향을 바꾸는 횟수
라고 가정 했을 때, i가 3번 바뀌면 1바퀴
이다.
if i % 3 == 0:
# 아래
elif i % 3 == 1:
# 오른쪽
elif i % 3 == 2:
# 왼쪽 위
최종적으로 삼각 달팽이를 만들려면최대 N개의 줄, 최대 N개의 행
을 가져야 하기 때문에, N by N 행렬
을 만든다.
[[0 for _ in range(n)] for _ in range(n + 1)]
그리고, 이제 아래
, 오른쪽
, 왼쪽 위
으로 이동 시키 위해, row, col
변수를 0
으로 선언해준다.
-아래
로 갈 때, row
를 1
증가시켜준다
-오른쪽
으로 갈 때, col
을 1
증가시켜준다
-왼쪽 위
로 갈 때, row, col
을 각각 1
감소 시켜준다.
그리고, 위치 변수
를 이동 시키고 값을 넣어준 다음, 그 값을 1
증가시켜준다.
그리고 return
값으로 0
을 지우고 이중 배열안에 있는 배열을 하나로 합쳐주면 된다.
snail = [[0 for _ in range(n)] for _ in range(n+1)]
row, col = 0, 0
value = 1
i = 0
while i < n:
for j in range(i, n):
if i % 3 == 0:
row += 1
elif i % 3 == 1:
col += 1
elif i % 3 == 2:
row -= 1
col -= 1
snail[row][col] = value
value +=1
i+= 1
return [x for y in snail for x in y if x != 0]