그리디 알고리즘
글로벌 최적을 찾기 위해 로컬 최적의 선택을 하는 휴리스틱 문제해결 알고리즘
잘 작동하기 위해 2가지 조건이 있다
교수님이 휴리스틱에 대해 1시간 넘게 열정적으로 설명해 주셨던 기억이 난다.. 설명하며 되게 행복해 보이셨다
합리적이고 체계적인 판단이 어려울 때, 필요 없을 때 빠르게 사용할 수 있는 간편추론의 방법
알고리즘에서는 최적해가 될 가능성이 없는 답들을 탐색하지 않고 답의 후보개수를 줄이는 방법이라고 한다..
import sys
input = sys.stdin.readline
n = int(input())
status = list(map(int, input().rstrip()))
target = list(map(int, input().rstrip()))
def change(stat, target):
cop = stat[:]
ans = 0
for i in range(1, n):
if cop[i-1] == target[i-1]:
continue
ans += 1
for j in range(i-1, i+2):
if j<n:
cop[j] = 1 - cop[j]
if cop == target:
return ans
else:
return float('inf')
cand = change(status, target)
status[0] = 1-status[0]
status[1] = 1-status[1]
cand = min(cand, change(status, target)+1)
print(-1) if cand==float('inf') else print(cand)