1 분 소요

문제 링크

풀이

# 밑변의 길이, 높이 = n
# 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기 진행
# 첫행부터 마지막 행까지 순서대로 합친 배열 return 하기
# 1은 항상 고정 주기적으로 행 다 돌때마다 행 + 1개 append 하기
# 행 값만큼 append 다 되면 다음 행으로 넘어감
# 각 행 맨 끝 값(count == 현재행 일때) => n + n-1 + n-(현재 행)
# 각 행의 두번째 값 => 위 행의 두번째값 + 1, 맨 마지막 줄 제외
# 맨 마지막 위의 행은 두번째 값 채우고 +1해나가면서 넣다가 count == 행 값 되면 마지막 값 넣기
# 맨 마지막줄은 행번호부터 n-1개만큼 더해가서 추가하면 끝

def solution(n):
    dp_list = [[0] * i for i in range(1, n + 1)]  # 초기 배열 생성
    x , y = -1, 0  # 처음 위치 지정
    num = 1    # 처음 행 지정
    answer = []
    
    for i in range(n):
        for j in range(i, n):
            if i % 3 == 0:
                x += 1
            elif i % 3 == 1:
                y += 1
            else:
                x -= 1
                y -= 1
            dp_list[x][y] = num
            num += 1
    
    for hang in dp_list:
        for number in hang:
            answer.append(number)
            
    return answer

답에서 해결한 방식

  • 탑처럼 쌓여있는 블럭들을 행 별로 각각 배열로 생각한 점
  • 각각 배열로 표현하여 초기 배열을 만듬
  • 아래로 내려가는 케이스, 오른쪽으로 가는 케이스, 위로 가는 케이스 3가지로 나누어 위치 이동시킴

내가 접근한 방식

  • 각 행의 값들이 n에 대한 식으로 표현될 것이다
  • 어떠한 규칙이 있어서 현재 행의 위치에 따라 값들이 변할 것으로 생각함

두 방식의 차이점

  • 각 행을 배열로 생각하였고 각각의 위치를 index 로 표현하였다.
  • 달팽이를 세가지 방향으로 케이스를 나누어 처리한 점

댓글남기기