삼전 코테 전까지 열심히 준비했던 문제들인데 블로그에 따로 올리지는 못했었다.
이 문제는 삼전 보기 전에 봤었는데 솔직히 구현은 잘 했으나 예외처리 부분에서 잘 안된 부분이 있었다.
import copy
import sys
input = sys.stdin.readline
N = int(input())
command = [list(map(int, input().split())) for _ in range(N**2)]
matrix = [[0]*N for _ in range(N)]
nums = {}
score = [0, 1, 10, 100, 1000]
def love_loc(love):
tmp = [[0]*N for _ in range(N)]
mx = 0
result = list()
for i in range(N):
for j in range(N):
if matrix[i][j] == 0:
cnt = 0
for a, b in [[0, 1], [1, 0], [-1, 0], [0, -1]]:
ia, jb = i+a, j+b
if 0 <= ia < N and 0 <= jb < N and matrix[ia][jb] in love:
cnt += 1
mx = max(mx, cnt)
tmp[i][j] = cnt
if mx == 0:
for i in range(N):
for j in range(N):
if matrix[i][j] == 0:
result.append((i, j))
else:
for i in range(N):
for j in range(N):
if tmp[i][j] == mx:
result.append((i, j))
return result
def empty_loc(res):
tmp = [[0]*N for _ in range(N)]
mx = 0
result = list()
for a, b in res:
cnt = 0
for i, j in [[0, 1], [1, 0], [-1, 0], [0, -1]]:
ia, jb = i+a, j+b
if 0 <= ia < N and 0 <= jb < N and matrix[ia][jb] == 0:
cnt += 1
mx = max(mx, cnt)
tmp[a][b] = cnt
if mx == 0:
return res
else:
for i in range(N):
for j in range(N):
if tmp[i][j] == mx:
result.append((i, j))
return result
def survey():
answer = 0
for i in range(N):
for j in range(N):
cnt = 0
for a, b in [[0, 1], [1, 0], [-1, 0], [0, -1]]:
ia, jb = i+a, j+b
if 0 <= ia < N and 0 <= jb < N and matrix[ia][jb] in nums[matrix[i][j]]:
cnt += 1
answer += score[cnt]
return answer
def solve():
for i in command:
num, love = i[0], set(i[1:])
nums[num] = love
res = love_loc(love)
if len(res) > 1:
res = empty_loc(res)
a, b = res[0]
matrix[a][b] = num
print(survey())
solve()
지금 생각해보면 골드5인거 치사하긴하다.ㅋㅋ
emptyloc 함수에서 if문을 넣어서 예외처리를 해줬는데 그 이유는 어디를 들어가야할지 모르겠는 상황에서의 예외처리이다.
결과적으로는 맞아서 다행이다.