문제 설명
•
크기의 달팽이를 출력하는 문제
◦
달팽이: 부터 까지의 숫자가 시계방향으로 이루어져 있다.
예제 입력/출력
•
입력1
2
3
4
...
Plain Text
복사
•
출력1
#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
...
Plain Text
복사
제약 조건
•
문제 풀이
•
브루트 포스 -
◦
문제에서 시키는 대로 구현하면 되는 단순 구현 문제에 해당
◦
동→남→서→북 순서대로 숫자를 채우다가 다음 조건에서 방향을 전환한다.
1.
행렬의 범위를 벗어났을 경우
2.
이미 방문한 경우
# 이동할 좌표가 유효한지와 이동 가능한지 검사
if 0 <= x < N and 0 <= y < N and matrix[y][x] == 0:
# 이동할 위치가 범위 내에 있고, 빈 공간일 경우
전진한다
else:
# 이동할 수 없으면 방향을 전환한다
방향을 전환한다
Python
복사
풀이 코드
# 방향 정의
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
T = int(input())
for tc in range(1, T + 1):
N = int(input())
matrix = [[0] * N for _ in range(N)]
x, y = 0, 0
d = 0 # 방향(동->남->서->북)
for cnt in range(1, N * N + 1):
matrix[y][x] = cnt
nx = x + dx[d]
ny = y + dy[d]
if (0 <= nx < N) and (0 <= ny < N) and matrix[ny][nx] == 0:
x = nx
y = ny
else:
d = (d + 1) % 4
x += dx[d]
y += dy[d]
# 출력
print(f"#{tc}")
for m in matrix:
print(" ".join(map(str, m)))
Python
복사