코딩

[SWEA] D2 1954. 달팽이 숫자 python 풀이( 2차원 그래프에 방향 적용하기)

블루베리QA 2022. 9. 3. 17:37

쉬워보이면서도 어떻게 해야하나? 싶은 달팽이 문제

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=PYTHON&select-1=&pageSize=10&pageIndex=2 

 

SW Expert Academy

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

swexpertacademy.com


T = int(input())

for tc in range (1, T+1):

    n = int(input())

    if n == 1:
        print('#{}'.format(tc))
        print(1)
        continue

처음에 입력된 숫자만큼 반복하는 기능을 먼저 구현한다.

from collections import deque

    numbers = deque([i for i in range (1, (n*n)+1)])
    answer = [[0 for _ in range(n)] for i in range(n)]

2차원 리스트를 구성,

들어갈 숫자도 모두 한 리스트에 넣어준다. ( 취향임 )


    y = 0
    x = 0
    vector = 'left'

    while numbers:
        
        k = numbers.popleft()
        
        if vector == 'left':
            answer[y][x] = k
            x += 1
            if answer[y][count-1] != 0:
                vector = 'down'
                x -= 1
        
        if vector == 'down':
            answer[y][x] = k
            y += 1
            if answer[count-1][x] != 0:
                vector = 'right'
                y -= 1
                
        if vector == 'right':
            answer[y][x] = k
            x -= 1
            if answer[y][n-count] != 0:
                count -= 1
                vector = 'up'
                x += 1
        
        if vector == 'up':
            answer[y][x] = k
            y -= 1
            if answer[n-count][x] != 0:
                vector = 'left'
                y += 1
                x += 1

2차원 리스트를 컨트롤 하기위해서 x축과 y축을 만들어주고,

vector 라는 변수로 방향을 컨트롤 해준다.

 

이제 방향을 바꿔가면서 준비한 number queue를 하나씩 터트려주면 완성!

 


    print('#{}'.format(tc))

    for a in range (n):
        for b in range(n):
            if b+1 == n:
                print(answer[a][b])
            else :
                print(answer[a][b], end=' ')

출력은 반복문으로 해줬다!

 


아직 블루투스 이어폰 없냥?나를 누르면 주겠다 냥!