코딩테스트/SWEA
[Python, 파이썬] SWEA 1954. 달팽이 숫자
알코딩
2024. 10. 15. 18:18
# 달팽이 만들기
def makeSnail(N):
global snail
global num
sx = sy = 0
ex = ey = N-1
for _ in range((N-1) // 2):
Go(sx, sy, ey+1) # 오른쪽(열 증가)
Down(ey, sx+1, ex) # 아래(행 증가)
Back(ex, ey, sy-1) # 왼쪽(열 감소)
UP(sy, ex-1, sx) #위(행 감소)
sx, sy, ex, ey = sx + 1, sy + 1, ex - 1, ey - 1 # 변수 업데이트
# N이 홀수일 때
if(N%2==1):
snail[sx][sy] = num
return
# N이 짝수일 때
Go(sx, sy, ey+1) # 오른쪽(열 증가)
Back(ex, ey, sy-1) # 왼쪽(열 감소)
# 오른쪽(열 증가)
def Go(x, start, end):
global num
for i in range(start, end):
snail[x][i] = num
num += 1
# 아래(행 증가)
def Down(y, start, end):
global num
for i in range(start, end):
snail[i][y] = num
num += 1
# 왼쪽(열 감소)
def Back(x, start, end):
global num
for i in range(start, end, -1):
snail[x][i] = num
num += 1
#위(행 감소)
def UP(y, start, end):
global num
for i in range(start, end, -1):
snail[i][y] = num
num += 1
# 달팽이 그리기
def draw(i, snail):
print("#%d" %(i))
for line in snail:
for x in line:
print(x, end=' ')
print()
T = int(input()) # 테스트 케이스의 수 T
for test_case in range(1, T+1):
N = int(input()) # 달팽이의 크기 N
snail = [[0 for i in range(N)] for j in range(N)] # 빈 달팽이
num = 1
makeSnail(N) # 달팽이 만들기
draw(test_case, snail) # 달팽이 그리기
[문제풀이]

- Go : 오른쪽(열 증가)
- Down : 아래(행 증가)
- Back : 왼쪽(열 감소)
- Up : 위(행 감소)
달팽이란 위처럼 4단계로 이루어져 있다.
이걸 함수로 만들어서 바깥쪽부터 안쪽으로 각 단계를 밟아 채워나가는 방식을 (N-1) // 2번 반복!

그럼 짝수일 때는 오른쪽(열 증가)랑 왼쪽(열 감소)가 남고,
홀수일 때는 딱 하나가 남는다.
마지막 남은 거까지 반복해주면 달팽이를 그릴 수 있다.
