1954

HoRi·2022년 8월 3일
0

SWEA_PY

목록 보기
26/32

1954. 달팽이 숫자

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

[예제]

N이 3일 경우,

123
894
765


N이 4일 경우,

1234
1213145
1116156
10987

[제약사항]

달팽이의 크기 N은 1이상 10이하의 정수이다.

[입력]

가장 첫 줄에는 테스트 케이스 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.

[출력]

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

코딩

T = int(input())				# 입력 받은 값을 정수형으로 변환시켜 T에 저장(테스트 케이스)

for i in range(1, T+1):			# 1부터 T까지 1씩 증가하는 반복문
    N = int(input())			# 입력 받은 값을 정수형으로 변환시켜 N에 저장(달팽이의 크기)
    arr = [[0 for _ in range(N)] for _ in range(N)]
    							# 입력 받은 N 만큼 0을 가지는 리스트를 생성하고 또 N 만큼 앞의 0의 개수 만큼을 가지는 리스트를 생성
                                # 예를 들어 N이 2라면 0을 2회 반복 입력 하고, 이거를 또 2회 반복 입력해서 0 0 0 0 리스트를 만든다.
    
    num = 1						# 리스트에 입력될 수
    row = 0						# 리스트의 행 값
    col = -1					# 리스트의 열 값
    trans = 1					# 입력되는 숫자가 방향 전환을 할 때 사용될 변수
    
    while N > 0:				# 입력 받은 값 N이 0보다 크다면 무한 반복
        for _ in range(N):		# 0부터 N-1까지 1씩 증가하며 반복
            col += trans		# 열의 값에 방향 이동을 해주는 trans를 더함
            arr[row][col] = num	# 리스트에 행과 열의 값을 인덱스로 받아서 num을 넣어줌
            num += 1			# num의 값을 1 증가
        N -= 1					# 입력 받은 값 N을 1 감소
        
        for _ in range(N):		# 0부터 N-1까지 1씩 증가하며 반복
            row += trans		# 행의 값에 방향 이동을 해주는 trans를 더함
            arr[row][col] = num	# 리스트에 행과 열의 값을 인덱스로 받아서 num을 넣어줌
            num += 1			# num의 값을 1 증가시킴
        trans *= -1				# trans의 값을 음수(-1)로 변경
        
    print('#{}'.format(i))		# format함수를 사용해서 테스트 케이스 번호를 출력
    for j in range(len(arr)):	# 0부터 리스트 arr의 길이 -1 까지 1씩 증가하며 반복
        print(*arr[j])			# *를 이용해서 리스트 arr를 압축 해제해서 반복문을 통해 리스트에 있는 값을 순서대로 출력



모든 출처는 SW Expert 아카데미에 있습니다.

해당 글은 영리적 목적이 아닌 학습의 기록으로 사용되었습니다. 오기나 잘못된 부분은 말씀해주시면 수정하겠습니다.

profile
무지성 작성소

0개의 댓글