삼각 달팽이

이종호·2020년 10월 30일
0

알고리즘

목록 보기
18/18

문제

달팽이는 반 시계 방향으로 돌아다니고, 지나간 순서를 배열에 담아 출력하면 그만이다.

코드

def solution(n):
    answer = []
    arr = [[0] * n for _ in range(n)]
    i = 0
    idx = [0, 0, n]
    m=1
    while True:
        n-=1
        if i == 0:
            same_col(arr, idx, m)
            m+=idx[2]
            idx[0],idx[1],  idx[2] = idx[0]+n,idx[1]+1, idx[2]-1
            if n == 0:
                break
            i+=1
            continue
        if i == 1:
            same_row(arr, idx, m)
            m+=idx[2]
            idx[0], idx[1], idx[2] = idx[0]-1, idx[1]+n-1, idx[2]-1
            if n == 0:
                break
            i+=1
            continue
        if i == 2:
            both_decrease(arr, idx, m)
            m+=idx[2]
            idx[0], idx[1], idx[2] = idx[0]-n+1, idx[1]-n, idx[2]-1
            if n== 0:
                break
            i-=2
            continue
    for i in range(len(arr)):
        for j in range(len(arr[i])):
            if arr[i][j] != 0:
                answer.append(arr[i][j])


    return answer
def same_col(arr, idx, n):
    x, y, count = idx
    for i in range(count):
        arr[x+i][y] = n
        n+=1
def same_row(arr, idx, n):
    x, y, count = id
    # print('same_row', idx)
    for i in range(count):
        arr[x][y+i] = n
        n+=1
def both_decrease(arr, idx, n):
    x, y, count = idx
    for i in range(count):
        arr[x-i][y-i] = n
        n+=1


print(solution(6))

풀이

혹시 다른 규칙같은게 있을까 열심히 머리를 굴려봤지만 애초에 문제는 구현 능력을 보는 것 같았다.
실제로 값이 증가하는 순서에 따라 아래로 내려가기, 오른쪽으로 이동하기, 위로가면서 왼쪽으로 가기를 3가지 함수를 만들었다.

결과는 잘 동작했지만, 시간이 너무 오래걸렸다.

구현을 익숙해 지기 위해 풀만한 좋은 문제인 것 같다.
자주 풀어봐서 쉽게 배열의 인덱스 개념이 머리에 들어오길 바래야겠다.

profile
열심히 사는 사람

0개의 댓글

관련 채용 정보