Hueestory

정수를 나선형으로 배치하기 (Python) 본문

PS/programmers

정수를 나선형으로 배치하기 (Python)

히명 2025. 6. 18. 14:24

 

접근

1. 시계방향으로 이동 중 배열의 끝에 닿거나 다음으로 이동할 칸에 이미 0이 아닌 값이 들어가 있으면 방향 전환

2. 방향 전환은 x(행), y(열)로 접근

3. (dx, dy)에서 →(0, 1), ↓(1, 0), ←(0,-1), ↑(-1, 0)

4. 이를 dx와 dy로 나누면 dx = [0, 1, 0, -1], dy = [1, 0, -1, 0]

 

코드

def solution(n):
    answer = [[0] * n for _ in range(n)]
    
    x, y = 0, 0
    dir = 0 # 0(→), 1(↓), 2(←), 3(↑)
    dx = [0, 1, 0, -1]
    dy = [1, 0, -1, 0]
    
    for i in range(1, n**2+1):
        answer[x][y] = i
        
        nx = x + dx[dir]
        ny = y + dy[dir]
        
        # 벽에 닿거나, 다음 칸에 0이 아닌 것이 들어가 있는 경우
        if not(0 <= nx < n and 0 <= ny < n) or answer[nx][ny] != 0:
            dir = (dir + 1) % 4	# 방향 전환
            nx = x + dx[dir]
            ny = y + dy[dir]
        
        x, y = nx, ny        
        
    return answer

 

결과

Comments