5597

# 과제 안 내신 분..?

import sys

# sys.stdin = open("input.txt", "r")

input = sys.stdin.readline

inputs = [int(input()) for _ in range(28)]

for i in range(1, 31):
  if i not in inputs:
    print(i)

2615

# 오목

import sys

# sys.stdin = open("input.txt", "r")

pan = [list(map(int, input().split())) for _ in range(19)]

dx = [-1, 0, 1, 1]
dy = [1, 1, 1, 0]

for i in range(19):
  for j in range(19):
    dol = 0
    if pan[i][j] == 0:
      continue
    dol = pan[i][j]  # 돌 무슨색인지 기억
    
    for k in range(4):  # 방향별로 오목인지 확인
      nx = i + dx[k]
      ny = j + dy[k]

      cnt = 1
      while 0 <= nx < 19 and 0 <= ny < 19 and pan[nx][ny] == dol:
        cnt += 1
        if cnt == 5:
          # 육목인지 확인 (육목인 경우 break하면 경계에 걸린 경우 고려 안해도 됨)
          if 0 <= i - dx[k] < 19 and 0 <= j - dy[k] < 19 and pan[i - dx[k]][j - dy[k]] == dol:
            break
          if 0 <= nx + dx[k] < 19 and 0 <= ny + dy[k] < 19 and pan[nx + dx[k]][ny + dy[k]] == dol:
            break

          # 오목인 경우
          print(dol)
          print((i+1), (j+1))
          sys.exit(0)
        nx += dx[k]
        ny += dy[k]

print(0)  # 승부가 안나는 경우

삽질한 코드…^^

# 오목

import sys

def printResult(k, i, j):
  print(k)
  print((i+1), (j+1))

sys.stdin = open("input.txt", "r")

pan = [list(map(int, input().split())) for _ in range(19)]

for i in range(19):
  for j in range(19):

    if pan[i][j] == 1:  # 검은색
      k = 1
    elif pan[i][j] == 2:  # 흰색
      k = 2
    else:
      continue

    # 오른쪽 방향
    if j+5 < 19:
      if pan[i][j+1] == k and pan[i][j+2] == k and pan[i][j+3] == k and pan[i][j+4] == k and pan[i][j+5] != k:
        if j == 0:
          printResult(k, i, j)
          break
        if pan[i][j-1] != k:
          printResult(k, i, j)
          break
    elif j+5 == 19:
      if pan[i][j-1] != k and pan[i][j+1] == k and pan[i][j+2] == k and pan[i][j+3] == k and pan[i][j+4] == k:
        printResult(k, i, j)
        break

    # 아래방향
    if i+5 < 19:
      if pan[i+1][j] == k and pan[i+2][j] == k and pan[i+3][j] == k and pan[i+4][j] == k and pan[i+5][j] != k:
        if i == 0:
          printResult(k, i, j)
          break
        if pan[i-1][j] != k:
          printResult(k, i, j)
          break
    elif i+5 == 19:
      if pan[i-1][j] != k and pan[i+1][j] == k and pan[i+2][j] == k and pan[i+3][j] == k and pan[i+4][j] == k:
        printResult(k, i, j)
        break

    # 우하향 대각선
    if j+5 < 19 and i+5 < 19:
      if pan[i+1][j+1] == k and pan[i+2][j+2] == k and pan[i+3][j+3] == k and pan[i+4][j+4] == k and pan[i+5][j+5] != k:
        if j == 0 or i == 0:
          printResult(k, i, j)
          break
        if pan[i-1][j-1] != k:
          printResult(k, i, j)
          break
        
    elif j+5==19 and i+5 < 19:
      if pan[i+1][j+1] == k and pan[i+2][j+2] == k and pan[i+3][j+3] == k and pan[i+4][j+4] == k:
        if i == 0:
          printResult(k, i, j)
          break
        if pan[i-1][j-1] != k:
          printResult(k, i, j)
          break
    elif i+5==19 and j+5 < 19:
      if pan[i+1][j+1] == k and pan[i+2][j+2] == k and pan[i+3][j+3] == k and pan[i+4][j+4] == k:
        if j == 0:
          printResult(k, i, j)
          break
        if pan[i-1][j-1] != k:
          printResult(k, i, j)
          break

    # 우상향 대각선(기준: 맨 오른쪽 위 돌이 i, j) -> 왼쪽 아래 돌을 기준으로 했어야 
    if 4 <= i < 19:
      if j+5 < 19:
        if pan[i+1][j-1] == k and pan[i+2][j-2] == k and pan[i+3][j-3] == k and pan[i+4][j-4] == k and pan[i+5][j-5] != k:
          printResult(k, i, j)
          break
      elif j+5 == 19:
        if pan[i+1][j-1] == k and pan[i+2][j-2] == k and pan[i+3][j-3] == k and pan[i+4][j-4] == k:
          if i+5 == 19:
            printResult(k, i, j)
            break
          if pan[i+5][j-5] != k:
            printResult(k, i, j)
            break

      # 우상향 대각선 조건 처리하다가 포기.......... 새로운 방법을 찾자!~!~

16926

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

level 0: 1 5 9 13 14 15 16 .. 2 , r만큼 rotate

# 배열 돌리기 1
# 큐 사용

import sys
from collections import deque

def rotate(level):
  nx, ny = level, level
  dx = [1, 0, -1, 0]
  dy = [0, 1, 0, -1] 

  queue = deque()
  global arr
  
  for i in range(4):
    while True:
      if not ((0+level) <= nx + dx[i] < (n-level) and (0+level) <= ny + dy[i] < (m-level)):
        break
      nx += dx[i]
      ny += dy[i]
      queue.append(arr[nx - dx[i]][ny - dy[i]])
  queue.rotate(r)

  nx, ny = level, level
  for i in range(4):
    while True:
      if not ((0+level) <= nx + dx[i] < (n-level) and (0+level) <= ny + dy[i] < (m-level)):
        break
      arr[nx][ny] = queue.popleft()
      nx += dx[i]
      ny += dy[i]

sys.stdin = open("input.txt","r")
input = sys.stdin.readline

n, m, r = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]

for l in range(min(n, m) // 2):
  rotate(l)

for i in range(n):
  for j in range(m):
    print(arr[i][j], end=' ')
  print()

아래는 시간초과난 코드