본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(코딩 기초 트레이닝): 정수를 나선형으로 배치하기

반응형

https://school.programmers.co.kr/learn/courses/30/lessons/181832

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 우, 하, 좌, 상의 방향을 위해 dr, dc배열을 선언 후 적절히 초기화합니다.

 

2. 정답 변수 answer 선언 후 n*n의 2차원 배열을 선언합니다.

 

3. 값 val선언 후 1로 초기화합니다.

 

4. 시작행과 열 r, c선언 후 각각 0으로 초기화합니다.

 

5. 방향 direction을 선언 후 0으로 초기화합니다.

📔 풀이과정

n*n만큼의 for loop를 수행하며 다음을 진행합니다.1. answer의 r행 c열을 val로 저장합니다.

 

2. val을 1 추가합니다.

 

3. 현재 방향으로 다음 좌표에 해당하는 행과 열을 nr, nc지역변수를 선언해 저장합니다.

 

4. nr, nc가 범위를 넘어가거나 answer의 nr행, nc열이 값이 채워져있다면 방향을 바꿔 nr, nc값을 다시 구해 갱신해줍니다.

 

5. r, c 값을 nr, nc로 갱신합니다.

📔 정답 출력 | 반환

answer를 반환합니다.


📕 Code

📔 Python3

def solution(n):
    #우,하,좌,상
    dr = [0,1,0,-1]
    dc = [1,0,-1,0]
    answer = [[0] * n for _ in range(n)]
    r, c = 0, 0
    direction = 0
    
    for val in range(1, n*n+1):
        answer[r][c] = val
        val += 1
        
        nr = r + dr[direction]
        nc = c + dc[direction]
        
        if 0 > nr or nr >= n or 0 > nc or nc >= n or answer[nr][nc]!=0:
            direction = (direction + 1) % 4
            nr = r + dr[direction]
            nc = c + dc[direction]
        
        r, c = nr, nc
        
    return answer

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.