# 달팽이 만들기
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번 반복!

그럼 짝수일 때는 오른쪽(열 증가)랑 왼쪽(열 감소)가 남고,
홀수일 때는 딱 하나가 남는다.
마지막 남은 거까지 반복해주면 달팽이를 그릴 수 있다.
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 1926. 간단한 369게임 (1) | 2024.10.15 |
|---|---|
| [Python, 파이썬] SWEA 1208. [S/W 문제해결 기본] 1일차 - Flatten (0) | 2024.10.15 |
| [Python, 파이썬] SWEA 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2024.10.15 |
| [Python, 파이썬] SWEA 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (1) | 2024.10.15 |
| [Python, 파이썬] SWEA 1206. [S/W 문제해결 기본] 1일차 - View (0) | 2024.10.15 |
