article thumbnail image
Published 2022. 8. 28. 15:10

아이디어

  1. 달팽이라는 문제를 풀었다면, 간단하게 풀 수 있을 것이다.
  2. 기준점을 잡는다. 행은 마지막 행, 열은 첫 번째 열
  3. K번을 채울 때 까지 
  4. 상, 우, 하, 좌 순으로 숫자를 채워나간다.
  5. 그 행, 열 위치를 참고하여 출력하는데,
  6. 열은 그냥 열+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)
복사했습니다!