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()
아래는 시간초과난 코드