본문 바로가기
ALGORITHM/PROGRAMMERS

[PG/Python] 삼각 달팽이

by 안녕나는현서 2022. 2. 27.
728x90

📌 문제

https://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

 

📌 문제 접근 방법

  1. 각 행마다 행번호에 +1한만큼 0을 채워서 2차원 배열 snail을 생성한다.
  2. 삼각형을 보면 처음에는 n개의 숫자가 아래 방향으로 채워지고, 그 다음은 n-1개의 숫자가 왼쪽 방향, 그 다음은 n-2개의 숫자가 위쪽 방향으로 채워진다.
  3. 즉, 방향은 무조건 아래->왼쪽->위 이고, 채워지는 숫자의 개수는 1씩 줄어든다.
  4. 이를 코드로 옮기면, 맨 처음은 무조건 아래로 내려가므로 i를 -1로 초기화한다.
  5. 0부터 n까지 순회하며 n-m+1개의 숫자가 채워지므로 범위를 range(m, n)으로 설정한다.
  6. 방향을 바꿔가며 숫자를 채우고 2차원 배열을 쭉 나열하여 출력하면 된다.

 

📌 코드

def solution(n):
    snail = [[0 for _ in range(i+1)] for i in range(n)]
    
    num = 0
    i = -1
    j = 0
    
    for m in range(n):
        for _ in range(m, n):
            if m%3 == 0: #아래
                i += 1
            elif m%3 == 1: # 왼쪽
                j += 1
            else: # 위
                i -= 1
                j -= 1
                
            num += 1
            snail[i][j] = num
    
    answer = []
    
    for row in snail:
        answer += row
            
    return answer
728x90

'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글

[PG/Python] 캐시  (0) 2022.03.03
[PG/Python] N-Queen  (0) 2022.02.27
[PG/Python] 단속카메라  (0) 2022.02.27
[PG/Python] 아이템 줍기  (0) 2022.02.06
[PG/Python] 징검다리 건너기  (0) 2022.02.06

댓글