helios789789   3년 전

S, T 의 같은 자리의 문자열을 {S, T} 처럼 표현하겠습니다.

이때 {1, 0} 의 경우 문제의 조건에서 혼자 바꿀 순 없고, 0과 1을 다른 자리와 교환하는 방식으로밖에 매칭이 안됩니다.

따라서 여기에서, {1, 0} 은 {0, 1} 이나 {?, 1} 과 0,1 을 바꾸는 방법으로 매칭시킬 수 있습니다.

이때 {0, 1} 은 1회의 교환으로, {?, 1} 은 2회의 교환으로 (? -> 1 로 바꿔줘야함) 매칭이 가능한데,

이때 귀류법으로 그리디 알고리즘이 적용 가능함을 증명할 수 있습니다.

간단히 말씀드리면, {?, 1} 을 {0, 1} 대신 {1, 0} 과 매칭하는 경우에서 {?, 1} 대신 남은 {1, 0} 을 사용하면 매번 교환 횟수를 1회 씩 아낄 수 있죠!

따라서 {1, 0} 에 대해서 {0, 1} 과 매칭을 한 후, 아직 {1, 0} 남았다면 {?, 1} 과 마저 매칭을 해줍니다.

매칭이 불가능한 경우는 {1, 0} 의 개수 > {0, 1} 의 개수 + {?, 1} 의 개수 인 경우 이며 이때 아무리 잘 바꿔도 {1, 0} 이 남으므로 매칭이 불가능 합니다.

by injae, Kim

댓글을 작성하려면 로그인해야 합니다.