1913 BOJ Python

슬기로운 FE 세상·2022년 5월 5일
0

가운데를 기준으로 상하좌우에 대한 좌표를 분기해서 처리를 해주고, 하나의 달팽이 기준으로 끝나는 지점은 n n이기 때문에 n n이 되면 break해준다. 처음을 기준으로 위, 오른쪽을 갈 땐 움직이는 개수가 변하진 않고, 아래, 왼쪽으로 갈 때 하나씩 증가하기 때문에 그에 맞춰서 움직여주면 된다.

n = int(input())
k = int(input())

board = [[0] * n for _ in range(n)]

r = n // 2
c = n // 2
value = 1
dir = 1
count = 1
board[r][c] = value # 초기값
 
while value != n * n:
    if dir == 1:
        for _ in range(count):
            r -= 1
            value += 1
            board[r][c] = value
            
            if value == n * n:
                break
        
        dir = 2
    elif dir == 2:
        for _ in range(count):
            c += 1
            value += 1
            board[r][c] = value
            
        count += 1
        dir = 3
    
    elif dir == 3:
        for _ in range(count):
            r += 1
            value += 1
            board[r][c] = value
        
        dir = 4
    elif dir == 4:
        for _ in range(count):
            c -= 1
            value += 1
            board[r][c] = value
        
        count += 1
        dir = 1

ans = []
for i in range(n):
    for j in range(n):
        print(board[i][j], end = ' ')
        if board[i][j] == k:
            ans.append(i + 1)
            ans.append(j + 1)
    
    print()

print(*ans)
profile
자 드가자~~

0개의 댓글

관련 채용 정보