Search

SWEA 1954 달팽이 숫자

태그
구현

문제 설명

N×NN \times N 크기의 달팽이를 출력하는 문제
달팽이: 11부터 N×NN \times N까지의 숫자가 시계방향으로 이루어져 있다.

예제 입력/출력

입력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
복사

제약 조건

1N101 ≤ N ≤ 10

문제 풀이

브루트 포스 - O(N2)O(N^2)
문제에서 시키는 대로 구현하면 되는 단순 구현 문제에 해당
동→남→서→북 순서대로 숫자를 채우다가 다음 조건에서 방향을 전환한다.
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
복사