[알고리즘] BOJ 5002 도어맨

[BOJ] 5002 도어맨 바로가기

📍 문제

정인이는 강남의 유명한 클럽 Top Root의 도어맨이다. 클럽의 사장은 정인이에게 클럽이 꽉찼을 때, 클럽에 있는 남자와 여자의 수는 거의 비슷해야 한다고 말해주었다.

사람들은 클럽이 문을 열기 전 부터 줄을 서 있는다. 클럽이 문을 열면, 한 명씩 직접 정인이가 입장시켜 준다. 정인이는 그들이 줄을 순서를 바탕으로 입장시켜 준다. 이때, 항상 첫 번째에 있는 사람을 입장시켜야 하는 것은 아니다. 정인이는 재량을 발휘하여 두 번째로 줄 서있는 사람을 첫 번째 사람보다 먼저 입장을 시켜줄 수 있다. 물론 이런 상황이 자주 발생하면 앞 사람이 매우 짜증이 날 것이고, 정인이에게 시비를 걸 수도 있다. 하지만, 정인이는 모든 싸움을 이길 수 있는 사람이기 때문에 이런 걱정은 하지 않아도 된다.

안타깝게도, 정인이는 이렇게 싸움은 잘하지만, 숫자 계산은 잘 하지 못한다. 정인이는 항상 클럽에 들어가있는 남자와 여자의 차이를 머리속에 계산하고 있어야 한다. 이 차이가 정인이가 기억할 수 있는 값보다 크게 된다면 남은 사람들은 클럽에 입장을 할 수 없게 된다.

줄을 서 있는 순서와 정인이가 기억할 수 있는 차이의 최댓값이 주어졌을 때, 클럽에 있는 사람의 수의 최댓값을 구하는 프로그램을 작성하시오.


📍 입력

첫째 줄에 정인이가 기억할 수 있는 가장 큰 차이 X<100이 주어진다. 둘째 줄에는 줄을 서 있는 순서가 주어진다. 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)

좋은 웹페이지 즐겨찾기