본문 바로가기

Study/Algorithm 문제풀이

[SW Expert Academy] 1954. 달팽이 숫자(using python)

728x90
반응형

* 문제의 저작권은 SW Expert에 있습니다.

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE&problemTitle=%EB%8B%AC%ED%8C%BD%EC%9D%B4+%EC%88%AB%EC%9E%90&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

[ 문 제 ]

달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.
다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오.

[예제]
N이 3일 경우,

N이 3일 때 예시

N이 4일 경우,

N이 4일 때 예시

[제약사항]
달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)

[ 입 력 ]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.

[ 출 력 ]
각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

입력과 출력 예시

[ 전체코드 ] 

for i in range(1, int(input())+1):

    N = int(input())

    frame = [[0]*N for _ in range(N)]

    frame[0] = [ j for j in range(1, N+1)]

    shift = ["D","L","U","R"]

    fs = ""

    k = N * N - N

    m = 0

    n = 1

    while True:

        fs += shift[m] * (N-n)

        fs += shift[m+1] * (N-n)

        k -= (N-n)*2

        if k == 0:

            break

        if m == 2:

            m = 0

            n += 1

        else:

            m += 2

            n += 1

     

    row = 0

    col = N - 1

    value = N

    for _fs in fs:

        if _fs == "D":

           row += 1

           value += 1

           frame[row][col] = value

        elif _fs == "L":

            col -= 1

            value += 1

            frame[row][col] = value

        elif _fs == "U":

            row -= 1

            value += 1

            frame[row][col] = value

        else:

            col += 1

            value += 1

            frame[row][col] = value

    print(f"#{i}")

    for _f in frame:

        print(" ".join([str(__f) for __f in _f]))

########################################################################################

 

아래 그림과 같이, 달팽이 숫자의 규칙은 3 2 2 1 1 이고, N이 증가하더라도, N (N-1) (N-1) (N-2) (N-2) … 2 2 1 1 과

같은 형태가 된다는 것을 알 수 있다.

 

오른쪽으로 이동할때는 row는 변하지 않으며, col 만 변하고,

아래쪽으로 이동할때는 row가 변하고, col은 변하지 않는다.

 

→ : row(-), col(+1)

: row(+1), col(-)

: row(-), col(-1)

: row(-1), col(-)

 

달팽이 숫자 규칙

 

728x90
반응형