개발 공부~

[SWEA D2] 1954. 달팽이 숫자.py 본문

코딩테스트/SWEA

[SWEA D2] 1954. 달팽이 숫자.py

머밍 2024. 7. 4. 16:46

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&passFilterYn=Y&contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=P&pageSize=10&pageIndex=2

 

SW Expert Academy

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

swexpertacademy.com

문제

달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.

다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오.

  • 제약사항
  • 달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
  • 입력각 테스트 케이스에는 N이 주어진다.
  • 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
  • 출력(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
  • 각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.

ex

N이 3일 경우


N이 4일 경우,

Solution

오 -> 아래 -> 왼 -> 위의 순서로 이동해야함

dx =[1,0,-1,0]
dy=[0,1,0,-1]
dr=(dr+1)%4
nx = x + dx[dr]
ny = y + dy[dr]
T = int(input())
for tc in range(1, T + 1):
    n = int(input())
    answer = [ [0] *n for _ in range(n)]

    dx =[1,0,-1,0]
    dy=[0,1,0,-1]
    x,y =0,0
    dr =0

    for i in range(1,n*n+1):
        answer[y][x] = i
        nx = x+dx[dr]
        ny = y+dy[dr]

        if 0<=nx<n and 0<=ny<n and answer[ny][nx]==0:
            x, y = nx,ny
        else:
            dr=(dr+1)%4
            nx = x + dx[dr]
            ny = y + dy[dr]
            x, y = nx, ny


    print(f'#{tc}')
    for i in answer:
        print(*i)