아이디어
- 달팽이라는 문제를 풀었다면, 간단하게 풀 수 있을 것이다.
- 기준점을 잡는다. 행은 마지막 행, 열은 첫 번째 열
- K번을 채울 때 까지
- 상, 우, 하, 좌 순으로 숫자를 채워나간다.
- 그 행, 열 위치를 참고하여 출력하는데,
- 열은 그냥 열+1이고, 행은 처음 받은 행의 수에서 그 자리의 인덱스 행 번호를 빼주면 된다.
풀이
R, C = map(int, input().split())
arr = [[0]*R for _ in range(C)]
K = int(input())
if K > R*C:
print(0)
exit()
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
r = C -1
c = 0
arr[r][c] = 1
cnt = 0
k = 0
while arr[r][c] != K:
nr, nc = r + dr[k], c + dc[k]
if 0 <= nr < C and 0 <= nc < R and arr[nr][nc] == 0:
arr[nr][nc] = arr[r][c] + 1
r , c = nr, nc
else:
k = (k+1)%4
cnt += 1
print(c+1, C-r)
for line in arr:
print(*line)