파이썬 알고리즘

SWEA 13704 달팽이 숫자

뜻 지, 깨달음 오 2022. 9. 7. 23:39

https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYJ7KE5qKy8DFASv&contestProbId=AX73Fb0axQ4DFARO&probBoxId=AYKImykKjWgDFASv&type=USER&problemBoxTitle=list2&problemBoxCnt=5 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

풀이 key point들

 

1) while True: -> break 조건 써줘야함

   break 조건: n*n보다 입력값이 커질때

 

2) for문을 사용하지 않으니까

   directx, directy의 다음 index로 넘어갈 때 (for문에서의 continue 조건), index +=1

   directx, directy의 끝 index에서 다시 처음으로 돌아갈 때

if idx>3:
	idx = 0

3) nx, ny는 다음에 내가 갈 칸 확인하기

밑에서 x, y 값 실제로 바꿔주기

 

 

T = int(input())
 
for tc in range(1, T+1):
    n = int(input())
    arr = [[0]*n for _ in range(n)]
    x, y = 0, 0  #시작점
    idx = 0  #direct 돌면서 인덱스
    cnt = 0 #넣는 숫자 (1부터)
 
    directx = [1, 0, -1, 0]
    directy = [0, 1, 0, -1]
    # 오른쪽- 아래 -왼쪽 -위 순서대로 갈거임
 
    while True:
        cnt += 1
        if cnt > n*n:
            break
        arr[y][x] = cnt
        dy = y + directy[idx]
        dx = x + directx[idx]
 
        if dy<0 or dx<0 or dy>n-1 or dx>n-1 or arr[dy][dx] !=0:
            idx += 1
        if idx >3:
            idx =0
 
        y += directy[idx]
        x += directx[idx]
 

    print(f'#{tc}')
    for i in range(n):
        for j in range(n):
            print(arr[i][j], end= ' ')
        print()

'파이썬 알고리즘' 카테고리의 다른 글

SWEA 4861 회문  (0) 2022.09.16
SWEA 2805 농작물 수확하기  (0) 2022.09.12
SWEA 13565 전기버스  (0) 2022.09.07
SWEA 13569 그래비티 풀이  (1) 2022.09.07
<level: 9> 풀이의 key point들  (0) 2022.09.06