본문 바로가기

Coding Test/Programmers

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

728x90

 

 

나의 풀이

from collections import deque

def solution(n):
    dx, dy = [0, 1, -1], [1, 0, -1]
    snail, answer = [[0] * (i + 1) for i in range(n)], []
    queue = deque([(0, 0, 1, 0)])
    while queue:
        x, y, num, i = queue.popleft()
        snail[y][x] = num
        nx, ny = x + dx[i], y + dy[i]
        if 0 <= nx <= ny < n and not snail[ny][nx]:
            queue.append((nx, ny, num + 1, i))
        else:
            i = (i + 1) % 3
            nx, ny = x + dx[i], y + dy[i]
            if 0 <= nx <= ny < n and not snail[ny][nx]:
                queue.append((nx, ny, num + 1, i))
            else:
                break
    for floor in snail:
        answer.extend(floor)

    return answer

 

 

2차원 배열 sum을 활용한 풀이

def solution(n):
    dx=[0,1,-1];dy=[1,0,-1]
    b=[[0]*i for i in range(1,n+1)]
    x,y=0,0;num=1;d=0
    while num<=(n+1)*n//2:
        b[y][x]=num
        ny=y+dy[d];nx=x+dx[d];num+=1
        if 0<=ny<n and 0<=nx<=ny and b[ny][nx]==0:y,x=ny,nx
        else:d=(d+1)%3;y+=dy[d];x+=dx[d]
    return sum(b,[])

 

 

 

반응형