풀이


nxn 배열에서 나선형으로 숫자가 배치될 때 입력된 숫자의 좌표를 출력하는 문제이다.

숫자들을 나선형으로 배치해야하기 때문에 배열의 끝에 닫거나 이미 숫자가 있는 자리일 경우 우측으로 회전하는 식으로 dx dy 를 선언해주었고 찾고자하는 숫자가 배치되었을 경우 해당 좌표를 출력하는 식으로 반복문을 짰다.

소스코드


# 자리배정
import sys
input = sys.stdin.readline
 
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
 
c, r = map(int, input().split())
k = int(input())
board = [[0] * r for _ in range(c)]
x, y = 0, 0
board[x][y] = 1
i = 0
 
while True:
    if k > c*r:
        print(0)
        break
    if board[x][y] == k:
        print(x+1, y+1)
        break
    nx = x + dx[i]
    ny = y + dy[i]
    if 0 <= nx < c and 0 <= ny < r and board[nx][ny] == 0:
        board[nx][ny] = board[x][y] + 1
        x, y = nx, ny
    else:
        i = (i + 1) % 4

References