title: "[프로그래머스] 삼각 달팽이 Python 파이썬 해설 (Level 2) - 이도훈"
cleanUrl: "programmers/68645"
description: "프로그래머스 Level 2 문제 [삼각 달팽이]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def solution(n):
    if n == 1:
        return [1]
    # n x n 배열을 만들어서,
    # r번째 행의 r+1번째 열 이후부터 -1을 채운다.
    arr = [[0] * n for _ in range(n)]
    
    for r in range(n):
        for i in range(r+1, n):
        	arr[r][i] = -1
            
    d = 'down' # down, right, up 중 하나
    
    r, c = 0, 0
    cnt = 1
    while cnt <= n*(n+1)//2:
        arr[r][c] = cnt
        
        if d == 'down':
            r += 1
            if r == n-1:
                d = 'right'
            elif arr[r+1][c] != 0:
                d = 'right'
            
        elif d == 'right':
            c += 1
            if c == n-1:
                d = 'up'
            elif arr[r][c+1] == -1 or arr[r][c+1] != 0:
                d = 'up'
                
        elif d == 'up':
            r -= 1
            c -= 1
            if arr[r-1][c-1] != 0:
                d = 'down'
        
        cnt += 1
        
    answer = []
    for row in arr:
        for v in row:
            
            if v == -1:
                break
            else:
                answer.append(v)
    
    return answer

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges