D2
Problem
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
Solution
1. 나아갈 수 있는 방향을 설정해준다.(진행방향 순으로)
2. 진행 방향으로 나아가는 중, 다음과 같은 조건일 때 방향을 바꾼다.
- 입력이 이미 되어 있을 때
- 범위 바깥으로 나갔을 때
Code
for test_case in range(1, int(input()) + 1 ):
N = int(input())
arr = [[0] * N for _ in range(N)]
di = [0, 1, 0, -1]
dj = [1, 0, -1, 0]
recent_i = recent_j = i = j = 0
print(f'#{test_case}')
if N == 1: # 예외처리
print(1)
else:
while arr[recent_i][recent_j] == 0:
j += 1 # 행부터 넣기
if 0 <= recent_i < N and 0 <= recent_j < N: # 범위 내에서 회전
arr[recent_i][recent_j] = j # 하나씩 넣기
recent_i += di[i % 4] # 같은 방향으로 나아가기
recent_j += dj[i % 4]
# 만약 범위가 끝나거나 0이 아닌 부분을 만나면
if recent_j >=N or recent_i >=N or arr[recent_i][recent_j] != 0 :
recent_i -= di[i % 4] # 이전으로 돌아가서
recent_j -= dj[i % 4]
i += 1 # 다음 방향으로 설정하고
recent_i += di[i % 4] # 나아가기
recent_j += dj[i % 4]
for k in range(len(arr)):
print(*arr[k])
<부족한 부분은 댓글로 남겨주시면 저에게 도움이 됩니다!>
반응형
'Algorithm > SW Expert Academy Review' 카테고리의 다른 글
4613. 러시아 국기 같은 깃발 (0) | 2023.03.06 |
---|---|
1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2023.03.06 |
1961. 숫자 배열 회전 (0) | 2023.03.05 |
4839. [파이썬 S/W 문제해결 기본] 2일차 - 이진탐색 (0) | 2023.03.05 |
4843. [파이썬 S/W 문제해결 기본] 2일차 - 특별한 정렬 (0) | 2023.03.05 |