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

2022. 8. 23. 16:34알고리즘/프로그래머스

반응형

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

삼각 달팽이

월간 코드 챌린지 시즌1

문제

 

프로그래머스

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

programmers.co.kr

풀이

2차원 배열에서 1부터 삼각형의 방향따라 증가시켜가며 배열을 채워갔습니다.

그리고 크기는 방향을 전환할수록 1씩 줄어듭니다.

값을 1부터 시작하며 아래로 내려가는 변부터 시작합니다.

  1. (x,y) 로 설정되었다면 (x-1, y) 을 삼각형의 크기(N)만큼 진행합니다.
  2. 이후 아랫변을 진행하게 되는데 (x, y+1) 을 진행합니다.
  3. 이후 남은 변을 채울 시 대각선으로 역으로 올라가기 때문에 (x-1, y-1) 을 진행합니다.

매번 방향을 전환할 때 마다 N-1을 진행하여 변의 길이 조절을 합니다.

또한 이전에 진행한 x, y에 대해서 값을 조정 해주는 과정이 필요합니다.

풀이코드


def solution(n):
    answer = []
    li = [[0]*n for i in range(n) ]
    num_count = 1
    x=0
    y=0
    while(n>0):
        for i in range(n):
            li[x][y] = num_count
            x+=1
            num_count+=1
        n-=1
        if n<=0:
            break
        x-=1
        y+=1
        for i in range(n):
            li[x][y] = num_count
            y+=1
            num_count+=1
        n-=1
        if n<=0:
            break
        y-=2
        x-=1
        for i in range(n):
            li[x][y] = num_count
            x-=1
            y-=1
            num_count+=1
        n-=1
        if n<=0:
            break
        x+=2
        y+=1
    for l in li:
        for i in l:
            if i==0:
                continue
            else:
                answer.append(i)
    return answer

가장 인기 많은 코드


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,[])

반응형