코딩테스트 연습 - 삼각 달팽이 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 삼각 달팽이
5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]
programmers.co.kr
풀이)
결국에는 삼각형의 외각을 돌면서 인덱싱을 하는 문제이기 때문에 삼각형을 돌면서 인덱싱하는 함수를 만들어 반복시켰다.

위 처럼 O표시한 곳을 시작점으로 왼쪽 아래로 n-1번 오른쪽으로 n-1번 왼쪽 위로 n-2번 탐색하면 삼각형의 외각을 돌 수 있다. 그 다음 바로 아래 행의 원소를 시작점으로 해서 다시 같은 과정을 반복한다.
코드)
lst1 = []
def func(startIndex,n,value):
x,y = startIndex
lst1[y][x] = value #시작점
value += 1
for i in range(n-1): #왼쪽 아래
y += 1
lst1[y][x] = value
value += 1
for i in range(n-1): #오른쪽
x += 1
#print("x : ",x,"y : ",y, "value : ",value)
lst1[y][x] = value
value += 1
for i in range(n-2): # 왼쪽 위
y -= 1
x -= 1
lst1[y][x] = value
value += 1
if(n - 3 > 0):
func((x,y+1),n-3,value)
return
def solution(n):
answer = []
for i in range(n): #0 ~ n
lst2 = []
for j in range(i,-1,-1): # i ~ n
lst2.append(0)
lst1.append(lst2)
func((0,0),n,1)
for i in lst1:
answer += i
return answer