코테 대비 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에게 쿠사리 들을 생각 하니 아찔 ㅜ ㅋㅋ