[アルゴリズム]BOJ 5002 GK


[BOJ]5002ゲートショートカット


📍 質問する


鄭仁は江南の有名なクラブtoprootの門童だ.クラブのオーナーは鄭仁に、クラブが満員になったとき、クラブの男女の人数は多くないはずだと話した.
人々はクラブが開く前から並んでいた.クラブが開場すれば、鄭仁は直接入場する.鄭仁は彼らに順番に入場させた.このとき、必ずしも最初の人を入場させるわけではありません.鄭仁は自分の才能を発揮して、2位の人を1位より先に入場させることができる.もちろん、このような状況が頻繁に発生すると、前の人はうんざりしたり、鄭仁の仕事を探したりするかもしれません.しかし、鄭仁はすべての戦闘に勝つことができる人なので、心配しないでください.
残念なことに、精寅はこんなにけんかが上手だが、数えられない.精寅はいつもクラブに入った男と女の違いを頭の中で計算しなければならない.この差が鄭仁が覚えている値より大きいと、残りの人はクラブに入ることができない.
並び順と精寅が覚えられる違いの最値を与えると、クラブの人数の最値を求めるプログラムを書く.

📍 入力


1行目は精寅が覚えられる最大の違いX<100を与える.2行目はキューの順序を示します.Wは女性、Mは男性、最長100.一番左の字は一番前の人の性別です.

📍 しゅつりょく


クラブの人数の最高値を印刷します.

📍 に答える


ハーモニー
from sys import stdin
X = int(stdin.readline())
people = list(stdin.readline().rstrip())
num = len(people)
total = 0 # 입장 인원 수
count = 0 #  남자와 여자의 차이
idx = 0 # 손님의 순서 index
while(idx <num):
  if people[idx] == 'W': # 현재 손님이 여성이라면
    if count > -X: # 기억할 수 있는 차이보다 적다면
      count -= 1
    else: # 기억할 수 있는 차이보다 많다면
      if idx + 1 < num and people[idx+1] == 'M': # 다음 손님이 남자가 맞다면
        idx += 1 # 다음 손님을 먼저 입장하고
        total += 1 # 현재 손님을 다음에 입장
      else: # 다음 손님이 남자가 아니라면
        break # 프로그램 종료
  elif people[idx] == 'M':
    if count < X:
      count += 1
    else:
      if idx+1 < num and people[idx+1] == 'W':
        idx += 1
        total += 1
      else:
        break
  idx += 1 # 다음 손님
  total += 1 # 입장한 고객 수
print(total)