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

최동혁·2023년 1월 1일
0

프로그래머스

목록 보기
62/68

풀이 방법

  1. 달팽이는 하, 우, 상 의 순서로 계속 반복함
  2. 한번 방문한 곳에 부딪히거나, 범위의 끝에 가면 바로 다음 방향으로 꺾어서 진행함

풀이 코드

def solution(n):
    total = (n + 1) * n // 2
    ls = [[] for _ in range(n)]
    visited = [[] for _ in range(n)]
    for i in range(1, n + 1):
        ls[i - 1] = [0] * i
        visited[i - 1] = [False] * i
    nx, ny = 0, 0
    # 1 : 하
    # 2 : 우
    # 3 : 상
    flag = 1
    i = 2
    visited[0][0] = True
    ls[0][0] = 1
    while i <= total:
        if flag == 1:
            nx += 1
            if len(ls) <= nx or visited[nx][ny]:
                flag = 2
                nx -= 1
            else:
                ls[nx][ny] = i
                i += 1
                visited[nx][ny] = True
        elif flag == 2:
            ny += 1
            if len(ls[nx]) <= ny or visited[nx][ny]:
                flag = 3
                ny -= 1
            else:
                ls[nx][ny] = i
                i += 1
                visited[nx][ny] = True
        else:
            nx -= 1
            ny -= 1
            if (nx < 0 and ny < 0) or visited[nx][ny]:
                flag = 1
                nx += 1
                ny += 1
            else:
                ls[nx][ny] = i
                i += 1
                visited[nx][ny] = True
    
    return ls
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글