본문 바로가기
TIL - 프로그래밍/Python 알고리즘

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

by chaemj97 2023. 3. 2.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/68645

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


    •  풀이
      • 삼각형이 반시계 방향으로 돌 때 이동방향
        • 아래로 -> 오른쪽으로 -> 왼쪽 대각선 위로 -> 아래로 ...(반복)
      • 삼각형 행번호, 열번호의 조건
        • 0 <= 열번호 <= 행번호 < n
        • 범위를 벗어날 때마다 방향 전환!
def solution(n):
    # 이동할 수 있는 방향
    d = [[1,0],[0,1],[-1,-1]]
    idx = 0
    
    # 삼각형
    arr = [[0]*i for i in range(1,n+1)]
    arr[0][0] = 1
    
    # 삼각형 요소 총 갯수
    cnt = sum([i for i in range(1,n+1)])
    # 들어갈 숫자 번호
    num = 2
    
    r,c = 0,0
    while num <= cnt:
        # 현 위치
        cr = r + d[idx][0]
        cc = c + d[idx][1]
        # 삼각형 범위 안에 속하는가?
        if 0 <= cc <= cr < n and arr[cr][cc] == 0:
            arr[cr][cc] = num
            num += 1
            r = cr
            c = cc
        # 방향 전환
        else:
            idx = (idx+1)%3
    
    # 결과
    answer = []
    for a in arr:
        answer += a
    return answer
728x90
반응형

댓글