[백준] 1913번 - 달팽이

yerimstar·2021년 7월 7일
0

구현

목록 보기
6/9

아이디어

문제에서 규칙을 찾으려고 했고, 그 규칙은 상자가 하나 늘어날 때마다 움직이는 정도가 2배씩 늘어난다는 것이었다.
예를 들어, N = 3인 경우에는 1을 제외하고 나머지 값들이 2칸씩 우,하,좌,상 방향으로 이동한다. N = 5인 경우에는 N = 3인 경우를 충족시킨 뒤, 4칸씩 우,하,좌,상 방향으로 이동한다. 이 부분을 통해 위치를 이동시키는 배열과 실제 이동하는 배열을 두고 문제를 풀었다.

코드

N = int(input()) # NxN
M = int(input()) # M의 위치는?
array = [[0 for col in range(N)] for row in range(N)]
num = int((N-1)/2)
array[num][num] = 1
check1 = num
check2 = num

lst_move = [[-1,0],[1,0],[0,-1],[-1,0]]
lst = [[0,1],[1,0],[0,-1],[-1,0]]

tmp = 1
for i in range(1,num+1):
    for j in range(4):
        check1 += lst_move[j][0]
        check2 += lst_move[j][1]
        for k in range(i*2):
            tmp += 1
            array[check1+k*lst[j][0]][check2+k*lst[j][1]] = tmp
            if k == (i*2-1):
                check1 = check1+k*lst[j][0]
                check2 = check2+k*lst[j][1]

for arr in array:
    print(' '.join(str(a) for a in arr))

for i in range(N):
    if M in array[i]:
        print(i+1,array[i].index(M)+1)
        exit()
profile
백엔드 개발자

0개의 댓글

관련 채용 정보