(python)프로그래머스-정수를 나선형으로 배치하기

DongDong·2023년 7월 5일
0

알고리즘 문제풀이

목록 보기
4/20

문제 설명
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
1 ≤ n ≤ 30

def solution(n):
    answer = [[0]*n for _ in range(n)]
    #우,하,좌,상
    dx=[0,1,0,-1]
    dy=[1,0,-1,0]
    x,y=0,0
    answer[x][y]=1
    k=2
    while k<=n*n:
        for i in range(4):
            while True:
                nx=x+dx[i]
                ny=y+dy[i]
                
                if nx>=n or ny>=n or nx<0 or ny<0 or answer[nx][ny]!=0:
                    break
                else:
                    answer[nx][ny]=k
                    x=nx
                    y=ny
                    k+=1
    return answer

시계방향 나선형으로 배치하기 때문에
방향을 우, 하, 좌, 상 순서로 설정하였다.

초기값 설정후 k가 n*n을 넘기 전까지 반복문을 실행시켜준다.

먼저 오른쪽으로 좌표 값을 더해주면서
좌표가 범위를 넘거나 혹은 이미 그 좌표에 0이 아닌 값이 들어가 있는 경우 while문을 탈출시키도록 해주었다.

while문을 나가면 오른쪽 다음인 아랫쪽 방향으로 변한 뒤 다시 while문을 반복해준다.

이런식으로 k값이 모든 배열에 들어가 0인 값이 없을 때 전체 while문을 종료한다.

0개의 댓글