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

CHOI YUN HO·2021년 5월 22일
0

알고리즘 문제풀이

목록 보기
34/63

📃 문제 설명

삼각 달팽이

[문제 출처 : 프로그래머스]

👨‍💻 해결 방법

골 때리는 문제였다..

처음에는 어떤 규칙을 찾아서 배열에 착착착 넣고 싶었는데
아무리 짱구를 굴려봐도 잘 안됐다.

그래서 그냥 달팽이에 채울 숫자의 최대값을 구하고
n*n배열에 값을 채워넣는다.

이 때, 아래와 같이 채워넣어야 하기 때문에 flag를 이용하여
수를 채우는 방향을 바꿔주는 조건을 설정하여

각 조건에 맞으면 채워넣는 방향을 바꿔주면서 계속 진행한다.
뭐랄까 좀더 formal한 방법을 생각해내고 싶었지만 머리가 아파서 그만!
끝 !!

👨‍💻 소스 코드

def solution(n):
    snail = [[0 for i in range(n)] for i in range(n)]

    # 삼각 달팽이에 채울 숫자의 최대값
    maxNum = n * (n // 2 + 1)
    if not n & 1:
        maxNum -= (n // 2)

    top, bottom, left, right = 0, n - 1, 0, n - 1
    flag = 0
    row, col = -1, 0
    for i in range(1, maxNum + 1):
        if flag == 0:
            row += 1
            if row == bottom:
                flag = 1
                top += 1
                left += 1
        elif flag == 1:
            col += 1
            if col == right:
                flag = 2
                bottom -= 1
                right -= 1
        elif flag == 2:
            row -= 1
            col -= 1
            if row == top or col == left:
                flag = 0
                top += 1
                right -= 1
        snail[row][col] = i

    answer = []
    for i in range(n):
        for j in range(n):
            if snail[i][j]:
                answer.append(snail[i][j])

    return answer
profile
가재같은 사람

0개의 댓글