아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

거짓말쟁이

면접 대비

시간 제한2초메모리 제한512 MB

요약
오른쪽 이웃이 거짓말쟁이인지에 대한 원형 답변 문자열이 주어질 때, 모든 답변과 모순되지 않는 최소 거짓말쟁이 수를 구하고 불가능하면 -1을 출력한다.
난이도

보통10점 중 4점

유형
완전 탐색, 구현, 배열
정답자
아직 제출이 없습니다

문제

알고리즘 캠프에 참가한 NN명이 교실 앞에 모여 원형으로 앉아 있다. 각 사람은 반시계 방향으로 00번부터 N−1N-1번까지 번호가 매겨져 있다.

참가자는 모두 정직한 사람이거나 거짓말쟁이다. 정직한 사람은 항상 사실만 말하고, 거짓말쟁이는 항상 거짓만 말한다.

진행자는 각 사람에게 오른쪽에 앉은 사람이 거짓말쟁이인지 물었다. 정직한 사람은 사실대로, 거짓말쟁이는 거짓으로 답한다. 정직한 사람과 거짓말쟁이 모두 답변을 거부할 수도 있다.

사람들의 대답이 주어졌을 때, 그런 대답이 나오는 정직한 사람과 거짓말쟁이의 조합이 존재하면 거짓말쟁이 수의 최솟값을, 가능한 조합이 없으면 −1-1을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 사람의 수 NN이 주어진다. (2≤N≤502 \le N \le 50)

둘째 줄에 길이가 NN인 문자열로 사람들의 답변이 주어진다. 왼쪽에서 ii번째 문자는 ii번 사람의 답변이며, 번호는 00부터 센다.

답변이 L이면 오른쪽 사람이 거짓말쟁이라고 대답한 것이고, H이면 정직한 사람이라고 대답한 것이며, ?이면 답변을 거부한 것이다.

출력

주어진 대답이 나오는 정직한 사람과 거짓말쟁이의 조합이 존재하면 거짓말쟁이 수의 최솟값을 출력한다. 가능한 조합이 없으면 −1-1을 출력한다.

참고

번호가 반시계 방향으로 붙어 있으므로 ii번 사람의 오른쪽에 앉은 사람은 (i+1) mod N(i+1) \bmod N번 사람이다.

예제5

  1. 예제 1

    입력
    3
    LLH
    
    예상 출력
    1
    
  2. 예제 2

    입력
    5
    ?????
    
    예상 출력
    0
    
  3. 예제 3

    입력
    5
    LHLH?
    
    예상 출력
    2
    
  4. 예제 4

    입력
    10
    ??LLLLLL??
    
    예상 출력
    3
    
  5. 예제 5

    입력
    3
    LLL
    
    예상 출력
    -1