본문 바로가기

Algorithm

[프로그래머스] 코딩테스트 연습 - 삼각 달팽이(Python)

코딩테스트 연습 - 삼각 달팽이 [월간 코드 챌린지 시즌1]

풀이

문제의 설명대로 코드를 짜면 되는 문제였던 것 같습니다. 귀여운 달팽이는 반시계 방향으로 삼각형을 그리며 안으로 돕니다. 아래의 경우를 보며 달팽이가 몇 번 어떻게 돌았는 지를 생각해보죠.

1. 왼쪽변 - [1, 2, 3, 4]

2. 밑변 - [5, 6, 7]

3. 오른쪽 변 - [8, 9]

4. 왼쪽변 - [10]

 

 

달팽이는 n개의 변을 그리고 하나의 변을 지날 때마다 그리는 숫자가 하나씩 줄어들게 됩니다. 그리고 방향은 [왼쪽-밑-오른쪽] 순서로 돌게 되니 % 3의 결과에 따라 움직임을 달리해주면 됩니다.

 

Code

def solution(n):
    triangle = [[0 for j in range(i,i+i)] for i in range(1,n+1)]
    line, idx, num = -1, 0, 0
    for direc in range(n):
        for step in range(n-direc):
            if direc % 3 == 0:      # 오른쪽 변
                line += 1
            elif direc % 3 == 1:    # 밑변
                idx += 1
            elif direc % 3 == 2:    # 왼쪽 변
                line -= 1
                idx -= 1
            num += 1
            triangle[line][idx] = num
    answer = sum(triangle, [])      # 하나의 list로 변환
    return answer

 

문제 설명

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

 

제한사항

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

입출력 예

n result
4 [1,2,9,3,10,8,4,5,6,7]
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]