코테 대비 python/백준
21608 상어 초등학교
ylab
2022. 8. 5. 10:24
https://www.acmicpc.net/problem/21608
21608번: 상어 초등학교
상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호
www.acmicpc.net
#import sys
#input = sys.stdin.readline
n = int(input())
m=n*n
room = [[0]*n for _ in range(n)]
like = [[] for _ in range(m+1)]
dx=[0,0,1,-1]
dy=[1,-1,0,0]
for _ in range(m):
array = list(map(int, input().split()))
#당사자 제외 각 행 좋아하는 사람
like_n = array[1:]
#당사자 칸안에 당사자가 좋아하는 사람 번호 넣기
like[array[0]] = like_n
temp = []
for i in range(n):
for j in range(n):
sum_like_n = 0
sum_empty = 0
if room[i][j] !=0 :
continue
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx <0 or nx > n-1 or ny <0 or ny > n-1:
continue
if room[nx][ny] in like_n:
sum_like_n +=1
if room[nx][ny] == 0:
sum_empty +=1
temp.append((sum_like_n,sum_empty,(i,j)))
temp.sort(key = lambda x:(-x[0], -x[1], x[2]))
room[temp[0][2][0]][temp[0][2][1]] = array[0]
sum_point = 0
for i in range(n):
for j in range(n):
point = 0
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx < 0 or nx > n - 1 or ny < 0 or ny > n - 1:
continue
if room[nx][ny] in like[room[i][j]]:
point += 1
continue
if point != 0:
sum_point += (10 ** (point - 1))
print(sum_point)
후 ming에게 쿠사리 들을 생각 하니 아찔 ㅜ ㅋㅋ