def findFit(li, i, j):
cnt = 0
s = li[i][j] # 현재 위치를 체스판 시작점으로 선언
for y in range(8):
for x in range(8):
if (x + y) % 2 == 0 and li[i + y][j + x] != s:
cnt += 1
elif (x + y) % 2 == 1 and li[i + y][j + x] == s:
cnt += 1
cnt2 = 0
for y in range(8):
for x in range(8):
if (x + y) % 2 == 0 and li[i + y][j + x] == s:
cnt2 += 1
elif (x + y) % 2 == 1 and li[i + y][j + x] != s:
cnt2 += 1
if cnt < cnt2:
return cnt
return cnt2
y, x = map(int, input().split())
li = []
for i in range(y):
str = input()
li.append(str)
min = findFit(li, 0, 0)
for i in range(y - 7):
for j in range(x - 7):
fit = findFit(li, i, j)
if min > fit:
min = fit
print(min)
x + y
값이 짝수인 색들이 시작 타일의 색과 일치하면 된다는 규칙을 발견하여 적용하였다.다른 블로그의 풀이를 보니 방법은 같지만 가독성이 더 좋다고 느꼈다.
for i in range(8)
로 두고 내부 index에 i를 더해서 계산하였는데 for i in range(i, i + 8)
로 두는것이 더 명확한 코드인 것 같다.def findFit(li, i, j):
cnt = 0
cnt2 = 0
s = li[i][j] # 현재 위치를 체스판 시작점으로 선언
for y in range(i, i + 8):
for x in range(j, j + 8):
if (x + y) % 2 == 0:
if li[y][x] != s:
cnt += 1
else:
cnt2 += 1
else:
if li[y][x] == s:
cnt += 1
else:
cnt2 += 1
if cnt < cnt2:
return cnt
return cnt2
수정한 결과 시간도 단축이 되었다. 아무래도 함수 내에서 2중반복을 한번만 하기 때문인 것같다.