본문 바로가기
프로그래머스/Lv.2

월간 코드 챌린지 시즌1 > 삼각 달팽이 - Python, 구현

by 아찌방 2024. 12. 17.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/68645

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

코드 & 풀이

 

def solution(n):
    snail = [[0] * n for _ in range(n)]
    direction = [(1, 0), (0, 1), (-1, -1)]
    x, y, num = -1, 0, 0
    
    for i in range(n):
        dx, dy = direction[i%3]
        for j in range(n - i):
            x += dx
            y += dy
            num += 1
            snail[x][y] = num
    
    return [value for row in snail for value in row if value != 0]

 

 

달팽이의 움직임은

 

아래로, 오른쪽으로, 대각선 왼쪽으로

 

이렇게 3가지 입니다.

 

2차원 리스트를 기준으로

 

아래는 (+1, 0),

 

오른쪽은 (0, +1),

 

대각선 왼쪽은(-1, -1)

 

입니다.

 

그리고 한 방향으로 움직이는 횟수는

 

주어진 n 부터 -1씩 줄어듭니다.

 

첫번째 반복문은 취향에 따라서 n부터 -1 해도 되고

 

저처럼 0부터 n까지 해도 됩니다.

 

그러면 두번째 반복문은 n - i 또는 i가 되겠죠.

 

그렇게 구한 이중 리스트를

 

0을 제외한 값들을 한 곳으로 모으면

 

우리가 원하는 결과를 얻을 수 있습니다.

 

 

다음에 또 봐요

 

728x90