21608번: 상어 초등학교
상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호
www.acmicpc.net
N = int(input())
students = [list(map(int, input().split())) for _ in range(N**2)]
seat = [[0]*N for _ in range(N)]
dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]
seat[1][1] = students[0][0] # 첫번째는 항상 1,1에 앉는다.
for i in range(1, N**2):
student = students[i]
tmp = []
for r in range(N):
for c in range(N):
empty = 0
like = 0
if seat[r][c] == 0:
for d in range(4):
nr = r + dr[d]
nc = c + dc[d]
if 0 <= nr < N and 0 <= nc < N:
if seat[nr][nc] == 0:
empty += 1
if seat[nr][nc] in student:
like += 1
tmp.append([like, empty, r, c])
tmp.sort(key= lambda x:(-x[0], -x[1], x[2], x[3]))
seat[tmp[0][2]][tmp[0][3]] = student[0]
result = 0
students.sort()
for r in range(N):
for c in range(N):
like = 0
for d in range(4):
nr = r + dr[d]
nc = c + dc[d]
if 0 <= nr < N and 0 <= nc < N:
if seat[nr][nc] in students[seat[r][c]-1]:
like += 1
if like <= 1:
result += like
elif like == 2:
result += 10
elif like == 3:
result += 100
elif like == 4:
result += 1000
print(result)
BFS문제
들어갈 수 있는 모든 자리에서 조건 순서대로 계산하여 리스트에 추가하여 lambda로 정렬해주고 자리를 배치해준다.
'파이썬' 카테고리의 다른 글
[백준] 2841 외계인의 기타연주 (0) | 2022.06.01 |
---|---|
[백준] 2644번 촌수계산 (0) | 2022.06.01 |
[백준] 2178번 미로탐색 (0) | 2022.05.31 |
[프로그래머스 level 1] 실패율 (python) (0) | 2022.05.21 |
백준 10951번 A+B-4 (파이썬) (0) | 2022.02.09 |