https://www.acmicpc.net/problem/21608
문제 해결을 위한 과정
구현 유형에 해당하는 문제 입니다. 조건 자체는 복잡할 수 있으나, 조건에 유의하여 소스코드를 작성하면 해결할 수 있었습니다. (저의 경우 possible.append()를 graph[nx][ny] == 0 즉 비어있을 때만 해줘야하는데 실수로 그렇지 않은 경우에도 append할 수 있게 작성하여 여러번 시도하여 해결했습니다.)
소스코드
a = int(input())
n = a * a
graph = [[0] * a for _ in range(a)]
friend = []
happy = [0, 1, 10, 100, 1000]
for _ in range(n):
friend.append(list(map(int, input().split())))
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
for i in range(len(friend)):
main = friend[i][0]
bestFriend = friend[i][1:5]
possible = []
for j in range(a):
for k in range(a):
cnt = 0
emptyCnt = 0
if graph[j][k] == 0:
for l in range(4):
nj = j + dx[l]
nk = k + dy[l]
if nj < 0 or nk < 0 or nj >= a or nk >= a:
continue
if graph[nj][nk] in bestFriend:
cnt += 1
elif graph[nj][nk] == 0:
emptyCnt += 1
possible.append((cnt, emptyCnt, j, k))
possible.sort(key=lambda x: (-x[0], -x[1], x[2], x[3]))
j, k, x, y = possible[0]
graph[x][y] = main
ans = 0
for i in range(a):
for j in range(a):
for k in range(len(friend)):
if graph[i][j] == friend[k][0]:
bestFriend = friend[k][1:5]
cnt = 0
for l in range(4):
nx = i + dx[l]
ny = j + dy[l]
if nx < 0 or ny < 0 or nx >= a or ny >= a:
continue
if graph[nx][ny] in bestFriend:
cnt += 1
ans += happy[cnt]
print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
백준 9663번: N-Queen(Python) (0) | 2024.04.06 |
---|---|
백준 14891번: 톱니바퀴 (Python) (0) | 2024.04.04 |
백준 21610번: 마법사 상어와 비바라기(Python) (0) | 2024.04.02 |
백준 1238번: 파티(Python, cpp) (0) | 2022.02.27 |
백준 1753번: 최단경로(Python, cpp) (0) | 2022.02.22 |