[BOJ] 5002번 :도어맨(C++)

김영한·2021년 4월 21일
0

알고리즘

목록 보기
52/74

문제 링크 : 백준 5002번

[문제 접근]

  1. 클럽에 사람이 입장할 때 기억할 수 있는 가장 큰 차이보다 작으면 그냥 그 성별의 사람을 입장시킨다.
  2. 클 것 같으면 check를 true로 만들고 그 사람을 대기 상태로 만들어준다.
  3. 만약 기억할 수 있는 차이보다 큰데 대기하는 사람도 존재한다면 더 이상 클럽에 입장할 수 없다.

⭐ 클럽에 입장할 때 대기하는 사람이 있으면 조건 검사 후 통과하면 먼저 입장시켜야한다.

[소스 코드]

#include <iostream>
#include <algorithm>

using namespace std;
int x;
bool check = false;
char tmp;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> x;
    string s;
    cin >> s;
    int mansize=0, womansize=0;
    for(int i=0 ; i<s.size() ; i++) {
        if(s[i] == 'M') {
            int now = abs((mansize+1)-womansize);
            if(now<=x) mansize++;
            else {
                if(!check) {
                    tmp = 'M';
                    check = true;
                } else {
                    break;
                }
            }
        } else {
            int now = abs(mansize-(womansize+1));
            if(now<=x) womansize++;
            else {
                if(!check) {
                    tmp = 'W';
                    check = true;
                } else {
                    break;
                }
            }
        }

        if(check) {
            if(tmp == 'M') {
                int now = abs((mansize+1)-womansize);
                if(now<=x) {
                    mansize++;
                    check = false;
                }
            } else {
                int now = abs(mansize-(womansize+1));
                if(now<=x) {
                    womansize++;
                    check = false;
                }
            }
        }
    }
    cout << mansize + womansize;
    
    return 0;
}

0개의 댓글