[Programmers | Level 0] 정수를 나선형으로 배치하기

IBLOG·2023년 5월 10일
0

programmers

목록 보기
1/26

programmers

문제 설명

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


제한사항

  • 1 ≤ n ≤ 30

입출력 예

nresult
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까지 숫자를 채울 수 있습니다.

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

입출력 예 #2

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

  • 따라서 [[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]]를 return 합니다.


Solution Code

# Solution 1

def solution(n):
    answer = [[0] * n for _ in range(n)]
    locs = 1
    cnt = 1
    row, col = 0, -1

    while n > 0:
        for i in range(n): 
            col += locs
            answer[row][col] = cnt
            cnt += 1
        n -= 1		
        for i in range(n):
            row += locs
            answer[row][col] = cnt
            cnt += 1

        locs *= -1	 

    return answer

# Solution 2

dx=(0,1,0,-1)
dy=(1,0,-1,0)

def solution(n):
    board=[[0]*n for i in range(n)]
    x,y=0,0
    board[0][0]=1
    now=2
    d=0
    while now<=n*n:
        nx,ny=x+dx[d],y+dy[d]
        if not (0<=nx<n and 0<=ny<n) or board[nx][ny]:
            d=(d+1)%4
            continue
        x,y=nx,ny
        board[x][y]=now
        now+=1
    return board
profile
✢ 천천히 하나씩 기록해보자!

0개의 댓글