삼각형에 달팽이 채우기를 한 결과를 리스트에 담으면 다음 그림처럼 표현된다.
이제 삼각 달팽이를 채우는 과정을 보면,
1. 삼각형 맨 위 꼭짓점부터 시작해서 아래쪽, 오른쪽, 왼쪽 위 대각선 순으로 반복하면서 채운다.
2. 방향은 총 3가지이므로 %3 연산으로 방향을 정할 수 있다.
삼각 달팽이를 채울 때는 아래쪽 방향부터 시작해서 오른쪽, 왼쪽위 대각선 순서대로 총 (n-1)번 방향을 바꾸게 된다.
i
를 방향을 바꾸는 횟수라고 하면,
2-1. 아래쪽 i % 3 == 0
2-2. 오른쪽i % 3 == 1
2-3. 왼쪽위 대각선i % 3 == 2
의 규칙을 가짐을 알 수 있다.
3. 숫자를 채우는 규칙은, n
개의 수를 채우는 것부터 시작해서 방향을 바꿀 때마다 채워야할 수의 개수가 1
씩 줄어든다.
def solution(n):
answer = []
arr = [[0]*n for _ in range(n)]
x, y = -1, 0
num = 1
# i은 방향을 바꾸는 횟수
for i in range(n):
# n-i-1 은 현재 방향에서 채워야하는 숫자의 개수
for j in range(i, n):
# 아래로
if i % 3 == 0:
x += 1
# 오른쪽으로
elif i % 3 == 1:
y += 1
# 왼쪽위 대각선으로
elif i % 3 == 2:
x -= 1
y -= 1
arr[x][y] = num
num += 1
for i in range(n):
for j in range(i+1):
answer.append(arr[i][j])
return answer
1점밖에 안 준 걸 보면 어려운 문제는 아니었는데....
나는 미리 n x n 크기의 배열을 만들어놓고 한칸씩 이동하면서 채울 생각은 하지 못하고, 리스트에 append하면서 삼각 달팽이를 채워나갈 생각을 하니 막막했었다.
구글링을 한 후에야 아직 내가 문제에서 주어진 대로 문제를 풀으려는 습관을 못 고쳤다는 걸 느꼈다. 컴퓨터적 사고가 필요합니다!!!!!