SWEA 1954. 달팽이 숫자

JeanDeluge·2023년 3월 8일

SWEA

목록 보기
7/8

풀이 과정

  1. 주어진 N으로 N X N 이차원 배열을 만든다.
  2. 숫자의 갯수는 N X N 개 이므로, count가 N x N개 일때까지만 다음을 반복한다.
  3. rowStart = 0, rowEnd = n, columnStart = 0, columnEnd = n 로 한다.
    이때 rowEnd, columnEnd 를 n-1로 설정하지 않은 이유는 range함수에서 범위 체크때문이다.
  4. 먼저 첫번째 행을 채운다.rowStart = 0 일때, columnStart = 0, columnEnd = n 이다.
    그렇다면 현재 첫번째 행의 인덱스는 (0, 0), (0, 1), (0, 2) , ... (0, n)으로
    snail[i][j] 중 행을 뜻하는 i 는 rowStart =0으로 고정한다.열의 인덱스 j는 수학적 변수로, columnStart 에서 columnEnd -1 까지 한 칸씩 이동하며 각각 0,1,2,3,..., n-1 으로 변화해야한다.
  5. 첫번째 행을 모두 채웠으면, 이제 첫번째 행에서 할 내용은 없으므로 rowStart + 1을 해준다.
  6. 두번째로 인덱스 (i, n-1) (i은 수학적 변수) 로, 인덱스 1번 행에서 n-1 행에 각각 n+1, n+2 ..., 2n-1 숫자를 대입한다.
  7. 세번째로는 (n-1, i) (i는 n-1 ~ 0 까지) 마지막 행, 즉 rowEnd 에서, 각각의 열에 2n ~ 3n-1 숫자를 넣어야한다.
    모두 채우면 rowEnd - 1로 변화한다. 이유는 현재의 rowEnd에서의 마지막 행은 모두 찼기 때문이다.
  8. 네번째로는 (0, n-2) 에서 (0, 1) 까지 채워야한다.
    이 곳을 모두 채우면 columnStart + 1 을 한다. 이유는 현재 첫번재 열은 다 채워졌기 때무에 두번째 열부터 채여야한다.

이때부터는 2~8번의 내용을 반복해야한다.

    while n * n >= count and rowStart <= rowEnd :
        for i in range(rowStart, columnEnd):
            snail[rowStart][i]  = count
            count = count + 1
        # 열을 바꿔주기 위해서
        rowStart  = rowStart + 1
        for i in range(rowStart, rowEnd):
            snail[i][columnEnd-1] = count
            count = count + 1
        columnEnd = columnEnd - 1
        for i in range(columnEnd-1, columnStart-1, -1):
            snail[rowEnd -1][i] = count
            count = count + 1
        rowEnd = rowEnd -1
        for i in range(rowEnd-1, rowStart-1, -1):
            snail[i][columnStart] = count
            count = count + 1
        columnStart = columnStart +1
    print("#{}".format(test_case))
    for row in snail:
        for column in row:
            print(column, end=" ")
        print()

리뷰

2시간 소요 : row, column 변화를 수기로 체크해가면서 하느라 늦었다.

나선형 순회 알고리즘 공부로 늦었다. 나선형 순회알고리즘은 너무 어려워서 이해한 다음, 그 다음 포스팅에서 공부한 내용을 정리하고자한다.

0개의 댓글