1954. 달팽이 숫자

D2

Problem

SW Expert Academy 달팽이 숫자D2

 

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])


<부족한 부분은 댓글로 남겨주시면 저에게 도움이 됩니다!>

 

반응형