본문 바로가기
Algorithm/프로그래머스

[프로그래머스] Lv2 - 삼각 달팽이 (파이썬)

by _temp 2022. 4. 11.

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

 

def solution(n):
    arr = [[0 for _ in range(i)] for i in range(1, n+1)]
    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
            else:
                x -= 1
                y -= 1
            arr[x][y] = num
            num += 1
    answer = []
    for l in arr:
        answer += l
    return answer

 

풀이
1. arr : 높이가 n인 계단식 리스트 선언
2. x, y = 값을 넣을 좌표, num = 넣을 값
3. 이중 for문 (n, i~n)
    - (i % 3) == 0, x좌표 1 증가
    - (i % 3) == 1, y좌표 1 증가
    - (i % 3) == 2, x, y 좌표 1 감소
    - 해당 좌표에 값(num)을 넣고 값(num) 1 증가
4. arr의 모든 요소를 answer에 1차원 리스트로 담기
5. answer 출력

 

화살표의 총개수는 n번 나오게 됨, 따라서 n번 반복문 사용

각 좌표의 이동의 횟수는 점점 1씩 줄어듬, 따라서 i~n의 반복문 사용 (n, n-1, n-2 ... 1)

좌표의 이동은 총 3가지(아래 그림의 화살표), 따라서 3으로 나눈 나머지를 구해주는 이유