본문 바로가기

코딩테스트

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

def solution(n):
    if n == 1:
        return [[1]]
    answer = [[0]*n for _ in range(n)]
    x = 0
    y = 0
    direction = 'r'
    for i in range(n*n):
        answer[x][y] = i + 1
        if direction == 'r':
            y += 1
            if y == n-1 or answer[x][y+1] != 0:
                direction = 'd'
        elif direction == 'd':
            x += 1
            if x == n-1 or answer[x+1][y] != 0:
                direction = 'l'
        elif direction == 'l':
            y -= 1
            if y == 0 or answer[x][y-1] != 0:
                direction = 'u'
        elif direction == 'u':
            x -= 1
            if x == n-1 or answer[x-1][y] != 0:
                direction = 'r'
    return answer

 

정수를 나선형으로 배치하는 문제라 문제 상황은 크게 어렵지 안다고 생각했다. 하지만 코드를 작성하는 과정에서 언제 방향을 바꿔야하는지에 대해서 생각하는것이 어려웠다. 문제를 세분화 시켜보니 방향이 바뀌는 경우가 크게 두가지가 있었다.

맨끝에 도달하는 경우와 가려는 곳에 값이 이미 들어있으면 방향을 바꾸어야된다고 생각했다. 맨끝에 도달하는경우는 x,y좌표가 n-1이 될때

이미 값이 들어있는 경우는 answer[x][y+1] or [x+1][y]값이 0이 아닌경우 값이 들어 있다고 판단했다.

 

 

 

배운점:어렵고 복잡하다고 생각하는 문제도 문제상황을 세분화 시켜가며 문제상황을 하나씩 처리해가면 된다.