본문 바로가기
Problem Solving/Programmers

Programmers - 삼각 달팽이[파이썬(python)]

by Deeppago 2022. 4. 23.

문제 출처 : 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 함수를 완성해주세요.

 

제한사항

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

 

입출력 예

n result
4 [1,2,9,3,10,8,4,5,6,7]
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]

 


문제 풀이

간단한 구현 문제이다. 2차원 배열에 수를 채워 넣는 방법으로 문제를 풀었다.

삼각형을 달팽이 모양으로 만드는데 반복되는 규칙이 있다. 규칙은 아래와 같이 크게 3가지로 구분된다.

  1. n번만큼 배열의 x좌표가 증가한다. 이후 n을 1 감소시킨다.
  2. n번만큼 배열의 y좌표가 증가한다. 이후 n을 1 감소시킨다.
  3. n번만큼 배열의 x, y좌표가 동시에 감소한다. 이후 n을 1 감소시킨다.
  4. n 이 0이 될 때까지 1,2,3을 반복하며 배열에 수를 채워 넣는다.

위의 세 가지 규칙을 순서대로 반복하며 수를 채우면 된다. 이해를 돕기 위해 구체적으로 예를 들어보자면 n=4일 경우

아래와 같인 2차원 배열을 초기화한다.

arr = [[0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]

이후 위 규칙에 따라 숫자를 증가시키며 arr배열에 수를 갱신한다. 위 규칙에 따라 추가될 수와 x, y좌표를 표로 표현하면 아래와 같다.

n 배열의 x좌표, y좌표 추가될 수
4 (0, 0) 1
4 (1, 0) 2
4 (2, 0) 3
4 (3, 0) 4
3 (3, 1) 5
3 (3, 2) 6
3 (3, 3) 7
2 (2, 2) 8
2 (1, 1) 9
1 (2, 1) 10

 

구현 코드

코드 링크 : 삼각 달팽이

def solution(n):
    answer = []
    arr = []
    for i in range(1, n+1):
        arr.append([0]*i)
    x = -1
    y = 0
    flag = 0
    num = 1
    while n > 0:
        if flag % 3 == 0:
            for i in range(n):
                x += 1
                arr[x][y]= num
                num+=1
        elif flag % 3 == 1:
            for i in range(n):
                y += 1
                arr[x][y] = num
                num+=1
        else:
            for i in range(n):
                x -= 1
                y -= 1
                arr[x][y] = num
                num+=1
        flag += 1
        n -= 1
    for row in arr:
        for value in row:
            answer.append(value)
    return answer

댓글