* 문제의 저작권은 SW Expert에 있습니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
[ 문 제 ]
달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.
다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오.
[예제]
N이 3일 경우,
N이 4일 경우,
[제약사항]
달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
[ 입 력 ]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.
[ 출 력 ]
각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
[ 전체코드 ]
for i in range(1, int(input())+1):
N = int(input())
frame = [[0]*N for _ in range(N)]
frame[0] = [ j for j in range(1, N+1)]
shift = ["D","L","U","R"]
fs = ""
k = N * N - N
m = 0
n = 1
while True:
fs += shift[m] * (N-n)
fs += shift[m+1] * (N-n)
k -= (N-n)*2
if k == 0:
break
if m == 2:
m = 0
n += 1
else:
m += 2
n += 1
row = 0
col = N - 1
value = N
for _fs in fs:
if _fs == "D":
row += 1
value += 1
frame[row][col] = value
elif _fs == "L":
col -= 1
value += 1
frame[row][col] = value
elif _fs == "U":
row -= 1
value += 1
frame[row][col] = value
else:
col += 1
value += 1
frame[row][col] = value
print(f"#{i}")
for _f in frame:
print(" ".join([str(__f) for __f in _f]))
########################################################################################
아래 그림과 같이, 달팽이 숫자의 규칙은 3 2 2 1 1 이고, N이 증가하더라도, N (N-1) (N-1) (N-2) (N-2) … 2 2 1 1 과
같은 형태가 된다는 것을 알 수 있다.
오른쪽으로 이동할때는 row는 변하지 않으며, col 만 변하고,
아래쪽으로 이동할때는 row가 변하고, col은 변하지 않는다.
→ : row(-), col(+1)
↓ : row(+1), col(-)
← : row(-), col(-1)
↑ : row(-1), col(-)
'Study > Algorithm 문제풀이' 카테고리의 다른 글
[SW Expert Academy] 1928. Base64 Decoder(using python) (0) | 2021.02.09 |
---|---|
[SW Expert Academy] 1986. 지그재그 숫자(using python) (0) | 2021.02.05 |
[SW Expert Academy] 1989. 초심자의 회문 검사(using python) (0) | 2021.02.03 |
[SW Expert Academy] 2005. 파스칼의 삼각형(using python) (0) | 2021.02.01 |
[SW Expert Academy] 2027. 대각선 출력하기(using python) (0) | 2021.02.01 |