거짓말쟁이
면접 대비시간 제한2초메모리 제한512 MB
오른쪽 이웃이 거짓말쟁이인지에 대한 원형 답변 문자열이 주어질 때, 모든 답변과 모순되지 않는 최소 거짓말쟁이 수를 구하고 불가능하면 -1을 출력한다.
문제
알고리즘 캠프에 참가한 명이 교실 앞에 모여 원형으로 앉아 있다. 각 사람은 반시계 방향으로 번부터 번까지 번호가 매겨져 있다.
참가자는 모두 정직한 사람이거나 거짓말쟁이다. 정직한 사람은 항상 사실만 말하고, 거짓말쟁이는 항상 거짓만 말한다.
진행자는 각 사람에게 오른쪽에 앉은 사람이 거짓말쟁이인지 물었다. 정직한 사람은 사실대로, 거짓말쟁이는 거짓으로 답한다. 정직한 사람과 거짓말쟁이 모두 답변을 거부할 수도 있다.
사람들의 대답이 주어졌을 때, 그런 대답이 나오는 정직한 사람과 거짓말쟁이의 조합이 존재하면 거짓말쟁이 수의 최솟값을, 가능한 조합이 없으면 을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 사람의 수 이 주어진다. ()
둘째 줄에 길이가 인 문자열로 사람들의 답변이 주어진다. 왼쪽에서 번째 문자는 번 사람의 답변이며, 번호는 부터 센다.
답변이 L이면 오른쪽 사람이 거짓말쟁이라고 대답한 것이고, H이면 정직한 사람이라고 대답한 것이며, ?이면 답변을 거부한 것이다.
출력
주어진 대답이 나오는 정직한 사람과 거짓말쟁이의 조합이 존재하면 거짓말쟁이 수의 최솟값을 출력한다. 가능한 조합이 없으면 을 출력한다.
참고
번호가 반시계 방향으로 붙어 있으므로 번 사람의 오른쪽에 앉은 사람은 번 사람이다.