정수를 나선형으로 배치하기 .python

Haks.·2024년 12월 11일
0

Study

목록 보기
7/69

문제 설명

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

제한사항

1 ≤ n ≤ 30
입출력 예

n	result
4	[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
5	[[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]
입출력 예 설명

입출력 예 #1

예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.

행 \ 열	0	1	2	3
0	1	2	3	4
1	12	13	14	5
2	11	16	15	6
3	10	9	8	7
따라서 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]를 return 합니다.

나의 풀이 :

  1. 경계를 어떻게 처리할 것인지 생각
  2. 방향을 어떻게 처리할 것인지
  3. 숫자를 어덯게 채울 것인지
def solution(n) :
	
    # n*n 크기의 [0] 으로 초기화된 2차원 배열 생성
    matrix = [[0] * n for _ in range(n)]
    
    # 방향 
    directions = [(0,1),(1,0),(0,-1),(-1,0)] # 오른쪽,아래,왼쪽,위 이순서도 중요함 나선형으로 돌아야하기에
    
    # 초기값 설정
    current_direction = 0
    x,y = 0, 0
    
    # 채우기 시작
    for num in range(1,n*n+1) :
    	matrix[x][y] = num
        
        # 다음 위치 계산
        dc,dy = directions[current_direction] 
        # 다음 위치가 경계에 걸치거나 올바르게 움직였나 확인을 위한 변수
        nx,ny = x + dx, y + dy
        
        # 경계 확인 #matirx[nx][ny] : 그자리에 숫자가 있는지 없는지 확인
        if nx < 0 or nx >=n or ny <0 or ny >=n or matrix[nx][ny] != 0 : 
        	# 경계에 포함되니까 방향을 전환해줘야 한다
            current_direction = (current_direction+1) % 4
            dx, dy = driection[current_direction]
            # 올바른 위치로 전달
            nx, ny = x + dx, y + dy
        # 다음 위치 업데이트 최종본
        x, y = nx, ny
    
    #완성
    return matrix

경계조건, 위치와 방향을 처음 생각해보는 거라 많은 시간이 걸렸다.

0개의 댓글