Coding Test

[프로그래머스] 삼각 달팽이 - Python3

binford 2022. 9. 28. 21:32

문제

문제 설명

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

제한사항

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

입출력 예

nresult

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]

 

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • 문제 예시와 같습니다.

 


풀이

설명

삼각 달팽이에서 1부터 n*n까지의 수가 채워지는 방향은 아래쪽, 오른쪽, 위쪽 순으로 반복된다.

  • 아래쪽 일 때, 행은 1씩 증가하고 열은 변화 없음
  • 오른쪽 일 때, 행은 변화 없고 열은 1씩 증가
  • 위쪽일 때, 행과 열 모두 1씩 감소

위의 패턴을 아래쪽 4번, 오른쪽 3번, 위쪽 2번, 다시 아래쪽 1번 반복한다.

 

풀이 코드

def solution(n):
    answer = []
    a = [[0]*i for i in range(1, n+1)]
    dr, dc = [1,0,-1], [0,1,-1]
    dir, loop = 0, n
    r, c = -1, 0
    num = 0
    
    while num < (n*(n+1))/2:
        for _ in range(loop):
            r += dr[dir]
            c += dc[dir]
            num += 1
            a[r][c] = num
        loop -= 1
        dir += 1
        if dir == 3: dir = 0
    for j in range(n): answer.extend(a[j])
    return answer

 

참고

자세한 설명은 https://biinford.tistory.com/13에서 참고