크크루쿠쿠

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

알고리즘

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

JH_KIM 2021. 6. 19. 00:14

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

문제 설명

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

 

 

문제풀이

진행하는 방향이 3가지임.

아래,오른쪽,위

방향 진행 횟수 총합 -> n번 : 이 개념을 알아야 풀 수 있는듯.

(ex: n=4 일때 아래,오른쪽,위,아래 ->4번)

배열로 짜야하기 때문에 왼쪽으로 밀어서 보기.

방향이 진행될수록 n,n-1 .... 1번 진행된다.

 

코드

from itertools import chain
def solution(n):
	#1,2,3,4...n 개로 늘어감
    snail=[[0 for _ in range(i+1)] for i in range(n)]
    #처음 위에서 아래니까 y=-1
    x,y=0,-1
    #입력할 숫자
    num=1
    #방향 n번
    for direct in range(n):
        for tri in range(direct,n):
        	#아래
            if direct%3==0:
                y+=1
            #오른쪽
            elif direct %3 ==1:
                x+=1
            #위
            else:
                x-=1
                y-=1
            snail[y][x]=num
            num+=1
    #배열 붙이기
    return list(chain(*snail))
                

(chain 한번 documents 확인해보기. https://docs.python.org/ko/3.8/library/itertools.html#itertools.chain )

 

번외편 (역삼각형)

 

거꾸로 해보는 역삼각달팽이 재미삼아 해봤음.

from itertools import chain
def solution(n):
    snail=[[0 for _ in range(i,n)] for i in range(n)]
    x,y=n,-1
    num=1
    for direct in range(n):
        for tri in range(direct,n):
            if direct%3==0:
                y+=1
                x-=1
            elif direct %3 ==1:
                y-=1
            else:
                x+=1
            snail[y][x]=num
            num+=1
    return list(chain(*snail))
                

 

 

Comments