BOJ 5002 - 도어맨 (Python)

조민수·2024년 3월 5일
0

BOJ

목록 보기
18/64
post-custom-banner

S2, 구현, 그리디


문제 설명

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

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

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

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

입력

첫째 줄에 정인이가 기억할 수 있는 가장 큰 차이 X<100이 주어진다. 둘째 줄에는 줄을 서 있는 순서가 주어진다. W는 여성, M은 남성을 나타내며, 길이는 최대 100이다. 가장 왼쪽에 있는 글자가 줄의 가장 앞에 서 있는 사람의 성별이다

출력

클럽에 있는 사람 수의 최댓값을 출력한다.

입력 예시

2
WMMMMWWMMMWWMW

출력 예시

8

풀이

처음에 문제 이해를 잘못해서 한참 걸렸다.
무조건 맨 앞과 두번째만 바꾼다고 생각했는데
현재 줄의 위치에서 다음 사람과 바꿀 수 있다는 뜻이었다.

from sys import stdin

x = int(stdin.readline())
line = list(map(str, stdin.readline().rstrip()))

men = 0
women = 0

for i in range(len(line)):
    if abs(men - women) < x:
        if line[i] == 'M': men += 1
        else: women += 1

    else:
        if line[i] == 'M':
            if abs(men + 1 - women) < x:
                men += 1
            else:
                if i + 1 < len(line) and line[i + 1]== 'W':
                    line[i], line[i+1] = line[i + 1], line[i]
                    women += 1
                else:
                    break
        else:
            if abs(women + 1 - men) < x:
                women += 1
            else:
                if i + 1 < len(line) and line[i + 1]== 'M':
                    line[i], line[i+1] = line[i + 1], line[i]
                    men += 1
                else:
                    break

print(men + women)
profile
사람을 좋아하는 Front-End 개발자
post-custom-banner

0개의 댓글