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

728x90
반응형

programmers.co.kr/learn/courses/30/lessons/68645

 

코딩테스트 연습 - 삼각 달팽이

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

문제에서는 배열이 삼각형모양으로 주어져 있지만, 왼쪽정렬을 시켜주는게 문제푸는데 도움이 된다.

n이 4일때, 왼쪽 정렬을 시켜주면 배열의 모양은 다음과 같다.

1

0

0

0

2

9

0

0

3

10

8

0

4

5

6

7

 

방향을 꺾어야 하는 수를 보면 n = 4일때 4, 7, 9, 10 에서 꺾어줘야한다. 즉, 꺾는 빈도가 1씩 줄어들고 있음을 알 수 있다. (n = 6일때를 그려서 보면 확실하게 이해가 될듯..)

 

따라서 이중반복문을 돌며 res[x][y]에 num을 넣어주고 num은 1씩 증가시켜준다.

 

마지막엔 res의 0이 아닌 값들을 answer에 넣고 출력해준다.

def solution(n):
    res = [[0] * n for _ in range(n)]
    answer = []
    x, y = -1, 0
    num = 1
    
    for i in range(n):
        for j in range(i, n):
            if i % 3 == 0:      # 아래
                x += 1          
            elif i % 3 == 1:    # 오른쪽
                y += 1            
            elif i % 3 == 2:    # 위
                x -= 1
                y -= 1      
            res[x][y] = num
            num += 1
            
    for i in res:
        for j in i:
            if j:
                answer.append(j)
    return answer
728x90
반응형
TAGS.

Comments