[프로그래머스] 삼각 달팽이 - python 본문

코테 문제 풀이

[프로그래머스] 삼각 달팽이 - python

미니모아 2022. 4. 27. 15:26
반응형

삼각 달팽이

문제 설명

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

examples.png

제한사항

  • n은 1 이상 1,000 이하입니다.

풀이

숫자가 채워지는 방향을 보면 아래, 오른쪽, 왼쪽대각선으로 반복되는 것을 알 수 있다. 채워지는 숫자의 개수는 n, n-1, n-2, n-3 ,... 으로 1일때까지 줄어든다.

 

n*n 2차원 배열을 만들어서 방향을 아래, 오른쪽, 왼쪽 대각선으로 바꿔가면서 채워준다.

현재 시점의 방향을 나타내는 i로 for문을 돌리면서 i부터 n까지로 이중 for문을 돌려준다. 채워야하는 숫자가 n , n -1, n -2, ....,1개로 줄어들기 때문이다.

 

n =4를 예로 보면

 

i = 0)

아래 방향으로 4개의 숫자가 채워진다.

i =1)

오른쪽 방향으로 3개의 숫자가 채워진다.

 

i = 2)

왼쪽 대각선 방향으로 2개의 숫자가 채워진다.

i = 3 = 0 )

아래로 1개의 숫자가 채워진다.

완성된 2차원 배열에서 0이 아닌 수만 골라서 순서대로 answer에 담으면 된다.

def solution(n):
    board = [[0] * n for _ in range(n)]
    answer = []
    x, y, num = -1, 0, 1

    for i in range(n):
        for _ in range(i, n):

            if i % 3 == 0:
                x += 1

            elif i % 3 == 1:
                y += 1

            elif i % 3 == 2:
                x -= 1
                y -= 1

            board[x][y] = num
            num += 1

    for i in range(n):
        for j in range(n):
            if board[i][j] != 0:
                answer.append(board[i][j])
    return answer
반응형
Comments