SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
[예제]
N이 3일 경우,
![](https://blog.kakaocdn.net/dn/bIb45b/btrCvJaEXBL/LlXtJvxrLUhqz3CIjpvNL1/img.png)
N이 4일 경우,
![](https://blog.kakaocdn.net/dn/bc4do6/btrCuUXMn9D/0KgBKeawTG2bkcSxfTplD1/img.png)
[제약사항]
달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.
[출력]
각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
입력2
3
4
3
4
출력#1
1 2 3
8 9 4
7 6 5
#2
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
1 2 3
8 9 4
7 6 5
#2
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
import sys
sys.stdin = open("달팽이.txt", "r")
def solution(n):
board = [[0]*n for _ in range(n)] #n*n 배열 만들기
x, y = 0, -1 #시작 x, y
dx = [0, 1, 0, -1] #위, 오른쪽, 아래, 왼쪽
dy = [1, 0, -1, 0]
loop = n #꺽이는 개수(5 4 4 3 3 2 2 1)
num = 0 #보드에 삽입될 숫자 1, 2, 3,...n*n
dir = 0 #0 1 2 3 0 1 2 3 ...
while num < n * n :
for _ in range(loop) : #5, 4, 4, 3, 3만큼 방향이동
x += dx[dir]
y += dy[dir]
num += 1
board[x][y] = num
#print(x, y)
dir = (dir + 1) % 4 #(방향) 0 1 2 3 0 1 2 3 0
if dir % 2 != 0 : #홀수인 경우 -1 해줌
loop -= 1
return board
T = int(input())
for tc in range(T) :
n = int(input())
result = solution(n)
print(f"#{tc+1}")
for i in result :
print(" ".join(map(str, i)))
# [[1, 2, 3, 4, 5],
# [16, 17, 18, 19, 6],
# [15, 24, 25, 20, 7],
# [14, 23, 22, 21, 8],
# [13, 12, 11, 10, 9]]
'코테풀이 > 구현' 카테고리의 다른 글
[Cos Pro 1급] 3회 문제 3(비숍 대각선 이동 위치이동) (0) | 2022.05.23 |
---|---|
[Cos Pro 1급] 1회 문제 6(체스 나이트 8방향 위치이동) (0) | 2022.05.19 |
[프로그래머스 | 2단계] [3차] 방금그곡 (0) | 2022.05.03 |
[프로그래머스 | 2단계] 방문 길이(이차원리스트 상하좌우 이동) (0) | 2022.04.21 |
공기청정기 - 확산 알고리즘 (0) | 2022.02.15 |
1954. 달팽이 숫자(달팽이, 소용돌이)