dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
N = int(input())
lst = dict()
for _ inrange(N**2):
key, *val = map(int, input().split())
lst[key] = val
cls = [[0]*N for _ inrange(N)]
empty =[(i, j) for i inrange(N) for j inrange(N)]
for num in lst :
tmp_lst = []
for i, (x, y) inenumerate(empty):
p, e = 0, 0for j inrange(4):
ax, ay = x+dx[j], y+dy[j]
if -1<ax<N and -1<ay<N :
if cls[ay][ax] in lst[num] :
p += 1elif cls[ay][ax] == 0:
e += 1
tmp_lst.append((p, e, y, x, i))
tmp_lst.sort(key = lambda x : (-x[0], -x[1], x[2], x[3]))
_, _, y, x, i = tmp_lst[0]
del empty[i]
cls[y][x] = num
ans = 0for i inrange(N):
for j inrange(N):
cnt = 0
num = cls[i][j]
for k inrange(4):
if -1 < i+dy[k] < N and -1 < j+dx[k] < N and cls[i+dy[k]][j+dx[k]] in lst[num] :
cnt += 1
ans += 0if cnt == 0else10**(cnt-1)
print(ans)
풀이 코드
import sys
input = sys.stdin.readline
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
N = int(input())
friend_dict = dict()
maps = [[0]*N for _ inrange(N)]
deffind_best_seat(n) :
bf, be, br, bc = 5, 5, N, N
for i inrange(N) :
for j inrange(N) :
if maps[i][j] == 0 :
f, e = 4, 4for k inrange(4) :
r, c = i + dr[k], j + dc[k]
if -1 < r < N and -1 < c < N :
if maps[r][c] in friend_dict[n]:
f -= 1elifnot maps[r][c] :
e -= 1if (bf, be, br, bc) > (f, e, i, j) :
bf, be, br, bc = f, e, i, j
maps[br][bc] = n
defcal_score() :
result = 0for i inrange(N) :
for j inrange(N) :
n = maps[i][j]
cnt = 0for k inrange(4) :
r, c = i + dr[k], j + dc[k]
if -1 < r < N and -1 < c < N and maps[r][c] in friend_dict[n] :
cnt += 1if cnt :
result += 10 ** (cnt-1)
print(result)
for _ inrange(N**2) :
n, *friend = map(int, input().split())
friend_dict[n] = friend
find_best_seat(n)
cal_score()