def solution(n):
answer = []
candidates=[[0]*(n+1) for _ in range(n+1)]
state=0
dx=[1, 0, -1]
dy=[0, 1, 0]
x, y = 1, 1;
data=1
start_index=1
for i in range(n, 0, -1):
if state==0:
for j in range(i):
candidates[x][y]=data
x += dx[state]
y += dy[state]
data+=1
x-=dx[state]
data-=1
state=1
elif state==1:
candidates[x][y]=data
for j in range(i):
x += dx[state]
y += dy[state]
data+=1
candidates[x][y]=data
state=2
else:
for j in range(i):
x += dx[state]
y += dy[state]
data+=1
candidates[x][y] = data
start_index+=1
x+=1
y=start_index
state=0
data+=1
for cs in candidates:
for c in cs:
if c!=0:
answer.append(c)
통과했지만 너무 더러움
def solution(n):
# 각 행의 길이가 1, 2, …, n 인 삼각형 리스트 생성
triangle = [[0] * (i + 1) for i in range(n)]
num = 1
x, y = -1, 0 # 첫 이동 전에 위치 지정
# 한 사이클마다 아래, 오른쪽, 좌상 이동을 하며 채워나감
for i in range(n, 0, -3):
# 1) 아래로 i칸 이동
for _ in range(i):
x += 1
triangle[x][y] = num
num += 1
# 2) 오른쪽으로 (i - 1)칸 이동
for _ in range(i - 1):
y += 1
triangle[x][y] = num
num += 1
# 3) 좌상(대각선 위)으로 (i - 2)칸 이동
for _ in range(i - 2):
x -= 1
y -= 1
triangle[x][y] = num
num += 1
# 삼각형 리스트를 1차원 리스트로 평탄화하여 반환
return [value for row in triangle for value in row]
알고보면 쉽다...
- 한 사이클에 3변을 만들어버린다.
- 개수만큼 만들어도 마지막 변 만들때 x-=1, y-=1해버리면 규칙에 맞음
- 시작을 -1로 해도 됨...