취준생의 코딩테스트 연습기

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

코딩테스트/프로그래머스

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

Jiwon_C 2021. 3. 13. 21:49

# 문제 링크

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

# Soultion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
def solution(n):
    answer = []
    li = [[0]*for i in range(n)] # n*n 리스트 생성
    
    x=-1; y=0 # 현재 좌표 저장
    num=1; cnt=
    for i in range(n):
        if i%3==0:
            
            # 아래 x+1
            for i in range(cnt):
                x +=1
                li[x][y] = num
                num+=1
        elif i%3==1:
            # 오른쪽 y+1
            for i in range(cnt):
                y+=1
                li[x][y] = num
                num+=1
        else:
            # 위로 x-1 y-1
            for i in range(cnt):
                x-=1; y-=1
                li[x][y] = num
                num+=1
        cnt-=1
        
    for i in li:
        for j in i:
            if j!=0:
                answer.append(j)
        
    return answer
cs

 

4. 0으로 채워진 n*n크기의 리스트를 초기화해준다.

7. 1부터 시작하기 때문에 num을 1로 초기화해주고 한개씩 증가시켜준다.

   for문을 한개 진행할때마다 채워야할 숫자의 개수가 n개에서 1개씩 줄어드므로 cnt를 n으로 초기화

9. 시작점으로부터 아래로 진행할 경우, x축을 1만큼 증가시킨 뒤 숫자를 대입한다.

12. cnt 만큼 숫자를 li에 채워준다.

16. 오른쪽으로 진행할 경우, y축을 1만큼 증가시킨 뒤 숫자를 대입한다.

22. 위로 진행할 경우, x축과 y축을 1씩 감소시킨다.

30. 2중 포문을 이용하여 안에 들어있는 값이 0이 아니면 answer에 해당 숫자를 대입하여 출력

Comments