풀이 key point들
1) while True: -> break 조건 써줘야함
break 조건: n*n보다 입력값이 커질때
2) for문을 사용하지 않으니까
directx, directy의 다음 index로 넘어갈 때 (for문에서의 continue 조건), index +=1
directx, directy의 끝 index에서 다시 처음으로 돌아갈 때
if idx>3:
idx = 0
3) nx, ny는 다음에 내가 갈 칸 확인하기
밑에서 x, y 값 실제로 바꿔주기
T = int(input())
for tc in range(1, T+1):
n = int(input())
arr = [[0]*n for _ in range(n)]
x, y = 0, 0 #시작점
idx = 0 #direct 돌면서 인덱스
cnt = 0 #넣는 숫자 (1부터)
directx = [1, 0, -1, 0]
directy = [0, 1, 0, -1]
# 오른쪽- 아래 -왼쪽 -위 순서대로 갈거임
while True:
cnt += 1
if cnt > n*n:
break
arr[y][x] = cnt
dy = y + directy[idx]
dx = x + directx[idx]
if dy<0 or dx<0 or dy>n-1 or dx>n-1 or arr[dy][dx] !=0:
idx += 1
if idx >3:
idx =0
y += directy[idx]
x += directx[idx]
print(f'#{tc}')
for i in range(n):
for j in range(n):
print(arr[i][j], end= ' ')
print()
'파이썬 알고리즘' 카테고리의 다른 글
SWEA 4861 회문 (0) | 2022.09.16 |
---|---|
SWEA 2805 농작물 수확하기 (0) | 2022.09.12 |
SWEA 13565 전기버스 (0) | 2022.09.07 |
SWEA 13569 그래비티 풀이 (1) | 2022.09.07 |
<level: 9> 풀이의 key point들 (0) | 2022.09.06 |