방향 벡터

pepe·2025년 11월 24일
# r, c일때
# 상 r-1, c
# 하 r+1, c
# 좌 r, c-1
# 우 r, c+1

# 표현
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
# 대각선도 표현가능하다.(왼쪽 위, 왼쪽 아래, 오른쪽 위, 오른쪽 아래 등)

# 배열 범위 초과, 이미 입력된 칸 등
# 조건을 바탕으로 방향전환을 하는 문제가 나온다.

문제

삼각 달팽이

나의 풀이

def solution(n):
    total = n*(n+1)//2
    dr = [1, 0, -1]
    dc = [0, 1, -1]
    ans = [[0]*(i+1) for i in range(n)]
    
    r, c = 0, 0
    dir = 0
    for num in range(1, total+1):
        ans[r][c] = num
        
        nr, nc = r+dr[dir], c+dc[dir]
        if nr < 0 or nc < 0 or nr >= n or nc >= n or ans[nr][nc] != 0:
            dir = (dir+1) % 3
            nr, nc = r+dr[dir], c+dc[dir]
        
        r, c = nr, nc
    
    return sum(ans, [])
            
profile
pepe

0개의 댓글