했던 실수들
jari[i-1][j+1]은 대각이지.. 상하좌우를 봐야하는데
j 써야하는 부분에 i 두 번 썼는지,
-1 써야하는 부분에 +1을 두 번 썼는지 검토할 것.
느낀점
디버깅에는 모듈화가 정말 중요하다
통과
import sys
input = sys.stdin.readline
N = int(input())
N2 = N**2
jari = [[0] * (N) for _ in range(N)]
def computePl(i, j, likes):
def islike(i, j):
if i < 0 or j < 0 or i >= N or j >= N:
return 0
if jari[i][j] in likes:
return 1
return 0
return islike(i-1, j) + islike(i+1, j) + islike(i, j-1) + islike(i, j+1)
def computePv(i, j):
def isvacant(i, j):
if i < 0 or j < 0 or i >= N or j >= N:
return 0
if jari[i][j] == 0:
return 1
return 0
return isvacant(i-1, j) + isvacant(i+1, j) + isvacant(i, j-1) + isvacant(i, j+1)
def locateOne(one, likes):
pl = [[0] * N for _ in range(N)]
maxpl = 0
pv = [[0] * N for _ in range(N)]
maxpv = 0
st1 = []
for i in range(N):
for j in range(N):
if jari[i][j] == 0:
pl[i][j] = computePl(i, j, likes)
if maxpl < pl[i][j]:
maxpl = pl[i][j]
st1 = [(i, j)]
elif maxpl == pl[i][j]:
st1.append((i, j))
st2 = []
while st1:
i, j = st1.pop()
pv[i][j] = computePv(i, j)
if maxpv < pv[i][j]:
maxpv = pv[i][j]
st2 = [(i, j)]
elif maxpv == pv[i][j]:
st2.append((i, j))
st2.sort()
i, j = st2[0]
jari[i][j] = one
inputs = dict()
score = 0
for _ in range(N2):
one, l1, l2, l3, l4 = map(int, input().split())
l = [l1, l2, l3, l4]
locateOne(one, l)
inputs[one] = l
for i in range(N):
for j in range(N):
finalPl = computePl(i, j, inputs[jari[i][j]])
# print(jari[i][j], inputs[jari[i][j]], finalPl)
score += (0 if finalPl == 0 else 10**(finalPl - 1))
print(score)
초기 코드
import sys
input = sys.stdin.readline
N = int(input())
N2 = N**2
jari = [[0] * (N) for _ in range(N)]
def computePl(i, j, likes):
def islike(i, j):
if i == 0 or j == 0 or i == N or j == N:
return 0
if jari[i][j] in likes:
return 1
return 0
return islike(i-1, j-1) + islike(i+1, j-1) + islike(i-1, j+1) + islike(i+1, j+1)
def computePv(i, j):
def isvacant(i, j):
if i == 0 or j == 0 or i == N or j == N:
return 0
if jari[i][j] == 0:
return 1
return 0
return isvacant(i-1, j-1) + isvacant(i+1, j-1) + isvacant(i-1, j+1) + isvacant(i+1, j+1)
def locateOne(one, likes):
pl = [[0] * N for _ in range(N)]
maxpl = 0
pv = [[0] * N for _ in range(N)]
maxpv = 0
st1 = []
for i in range(N):
for j in range(N):
if jari[i][j] == 0:
pl[i][j] = computePl(i, j, likes)
if maxpl < pl[i][j]:
maxpl = pl[i][j]
st1 = [(i, j)]
elif maxpl == pl[i][j]:
st1.append((i, j))
st2 = []
while st1:
i, j = st1.pop()
pv[i][j] = computePv(i, j)
if maxpv < pv[i][j]:
maxpv = pv[i][j]
st2 = [(i, j)]
elif maxpv == pv[i][j]:
st2.append((i, j))
st2.sort()
i, j = st2[0]
jari[i][j] = one
inputs = dict()
score = 0
for _ in range(N2):
one, l1, l2, l3, l4 = map(int, input().split())
l = [l1, l2, l3, l4]
locateOne(one, l)
inputs[one] = l
for i in range(N):
for j in range(N):
finalPl = computePl(i, j, likes[jari[i][j]])
score += (0 if finalPl == 0 else 10**(finalPl - 1))
print(jari)