🗒️ 파이썬 코드 풀이
T = int(input())
for tc in range(1,T+1):
N = int(input())
lst = [[0]*N for _ in range(N)]
di,dj = [0,1,0,-1],[1,0,-1,0]
i = j = k = 0
lst[i][j] = 1
cnt = 2
while cnt <= N*N:
ni,nj = i + di[k], j + dj[k]
if 0 <= ni < N and 0 <= nj < N and lst[ni][nj] == 0 :
i,j = ni,nj
lst[i][j] = cnt
cnt += 1
else :
k = (k+1)%4
print(f"#{tc}")
for i in range(N):
for j in range(N):
print(lst[i][j], end=" ")
print()
1. di,dj 방향으로 문제를 푸는 방식이다.
2. 반복횟수는 cnt의 값이 N*N까지로 설정한다.
3. ni,nj의 값을 동-남-서-북 방향으로 진행 시킨다. (처음 시작은 동쪽부터)
4. 범위는 0~N 까지이고 lst[ni][nj] = 0 인 지역만 가능하다.
i,j 값은 조건에 통과된 ni,nj로 바꿔주고 새로운 lst[i][j]의 값에 cnt를 넣어준다.
5. 해당 조건에 맞지 않는다면 k의 값은 +1 해준다. (4 이상의 값이 되면 다시 0으로 초기화)
🧐 문제 코멘트
D2에 정답률이 높은 문제이다.
근데 나는 이 문제 왤케 어렵지 ... 일반적인 di,dj 문자와는 좀 다른 느낌이다.
특히 while문을 쓰는데, 몇번을 어떻게 반복하고 제어할지 잘 생각하지 못했다.
📚 문제
달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.
다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오.
[예제]
N이 3일 경우,
N이 4일 경우,
[제약사항]
달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.
[출력]
각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
'알고리즘 > 알고리즘_swea' 카테고리의 다른 글
[Python][SWEA] 2001. 파리 퇴치 D2 (0) | 2024.05.18 |
---|---|
[Python][SWEA] 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (0) | 2024.05.18 |
[Python][SWEA] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2024.05.18 |
[Python][SWEA] 20728. 공평한 분배 2 D3 (0) | 2024.05.18 |
[Python][SWEA] 1859. 백만 장자 프로젝트 D2 (0) | 2024.05.18 |