보물창고 블로그

SW Expert Academy 1954. 달팽이 숫자 본문

알고리즘 풀이/SW Expert Academy

SW Expert Academy 1954. 달팽이 숫자

홋 메 2020. 1. 28. 14:09
728x90

문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com

나는 while문을 이용하여 해결하였다. 먼저 n을 인풋으로 받아서  n X n의 리스트를 만든 뒤에,  동남서북 방향 순서로 맵의 끝에 다다르거나 가려는 방향에 값이 0 이 아닐 경우에 방향을 바꾸도록 하였다. 풀이 코드는 다음과 같다.

t=int(input())
for test in range(1,t+1):
    n=int(input())
    map1=[[0 for _ in range(n)] for _ in range(n)]
    dx=[0,1,0,-1]
    dy=[1,0,-1,0]
    d=0
    x=0
    y=0
    n1=1
    while(1):
        if n1==pow(n,2)+1:
            break
        if -1<x<n and -1<y<n and map1[x][y]==0:
            map1[x][y]=n1
            x+=dx[d]
            y+=dy[d]
            n1+=1
        else:
            x-=dx[d]
            y-=dy[d]
            d+=1
            if d>3:
                d%=4
            x+=dx[d]
            y+=dy[d]
            map1[x][y]=n1
            n1+=1
            x+=dx[d]
            y+=dy[d]
    print('#{}'.format(test))
    for i in range(n):
        s=''
        for j in range(n):
            s+=str(map1[i][j])+' '
        print(s)
Comments