개발자일걸요..?

삼각 달팽이 본문

알고리즘코딩/Programmers

삼각 달팽이

Re_A 2021. 8. 26. 21:20
728x90
반응형

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

 

코딩테스트 연습 - 삼각 달팽이

5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

programmers.co.kr

(프로그래머스 > 코딩테스트 연습 > 월간 코드 챌린지 시즌1 > 삼각달팽이(level2))

 


<문제>

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

  • n은 1 이상 1,000 이하입니다.

 


 

<내가 작성한 코드>

from collections import deque
def solution(n):
    answer = [0 for i in range(1, (n*(n+1))//2+1)]
    num = deque([i for i in range(1, (n*(n+1))//2+1)])

    turn = 0
    turnPoint = 0
    start = 0
    k = 0
    current = 0
    while k<=n:
        current = turnPoint + 4*turn
        turnPoint = current

        for i in range(2*turn+1, n-k+2*turn):
            if num:
                answer[current] = num.popleft()
                current += i
            else:
                break
        k+=1

        for i in range(n-k+1):
            if num:
                answer[current] = num.popleft()
                current += 1
            else:
                break
        k+=1
        current-=1

        for i in range(n-k):
            if num:
                current+=(-n+i+turn)
                answer[current] = num.popleft()
            else:
                break
        k+=1
        turn+=1

    return answer

  삼각형을 형태로 돌면서 숫자를 집어넣되, 마지막에 return할 배열에 들어갈 위치를 계산해서 집어넣음

숫자들이 마지막 return될 배열에서 몇번 index에 위치할지를 등차수열로 나타내서 계산

 

 

<다른 사람의 코드를 참고하여 작성한 코드>

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

삼각형 모양을 만드는 배열칸을 만든 후, xy위치를 조정해가면서 숫자를 배열에 넣고, 마지막에 모든 요소를 합침.

 

 

 

반응형

'알고리즘코딩 > Programmers' 카테고리의 다른 글

순위 검색  (0) 2021.09.04
모음 사전  (0) 2021.08.31
예상 대진표  (0) 2021.08.24
수식 최대화  (0) 2021.08.23
위장  (0) 2021.08.21
Comments