Algorithm/programmers/월간 코드 챌린지 시즌1/level2/ 삼각 달팽이(with python)

yellow·2021년 7월 1일
0

알고리즘 문제

목록 보기
57/58

📖 문제

📝 풀이 과정

삼각형에 달팽이 채우기를 한 결과를 리스트에 담으면 다음 그림처럼 표현된다.

이제 삼각 달팽이를 채우는 과정을 보면,

1. 삼각형 맨 위 꼭짓점부터 시작해서 아래쪽, 오른쪽, 왼쪽 위 대각선 순으로 반복하면서 채운다.
2. 방향은 총 3가지이므로 %3 연산으로 방향을 정할 수 있다.
    삼각 달팽이를 채울 때는 아래쪽 방향부터 시작해서 오른쪽, 왼쪽위 대각선 순서대로 총 (n-1)번 방향을       바꾸게 된다.
    i를 방향을 바꾸는 횟수라고 하면,
           2-1. 아래쪽 i % 3 == 0
           2-2. 오른쪽i % 3 == 1
           2-3. 왼쪽위 대각선i % 3 == 2
    의 규칙을 가짐을 알 수 있다.
3. 숫자를 채우는 규칙은, n개의 수를 채우는 것부터 시작해서 방향을 바꿀 때마다 채워야할 수의 개수가 1씩 줄어든다.

⌨ 코드

def solution(n):
    answer = []
    arr = [[0]*n for _ in range(n)]
    x, y = -1, 0
    num = 1

    # i은 방향을 바꾸는 횟수
    for i in range(n):
        # n-i-1 은 현재 방향에서 채워야하는 숫자의 개수
        for j in range(i, n):
            # 아래로
            if i % 3 == 0:
                x += 1
            # 오른쪽으로
            elif i % 3 == 1:
                y += 1
            # 왼쪽위 대각선으로
            elif i % 3 == 2:
                x -= 1
                y -= 1
            arr[x][y] = num
            num += 1

    for i in range(n):
        for j in range(i+1):
            answer.append(arr[i][j])
            
    return answer

😊 느낀점

1점밖에 안 준 걸 보면 어려운 문제는 아니었는데....
나는 미리 n x n 크기의 배열을 만들어놓고 한칸씩 이동하면서 채울 생각은 하지 못하고, 리스트에 append하면서 삼각 달팽이를 채워나갈 생각을 하니 막막했었다.
구글링을 한 후에야 아직 내가 문제에서 주어진 대로 문제를 풀으려는 습관을 못 고쳤다는 걸 느꼈다. 컴퓨터적 사고가 필요합니다!!!!!

profile
할 수 있어! :)

0개의 댓글