코딩테스트 연습 - 삼각 달팽이 | 프로그래머스 (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

'프로그래머스' 카테고리의 다른 글

캐시  (0) 2021.11.24
모음사전  (0) 2021.11.24
프렌즈 4블록  (0) 2021.11.08
더 맵게  (0) 2021.10.31
짝지어 제거하기  (0) 2021.10.31

+ Recent posts