※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 5002번 문제인 도어맨이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/5002
5002번: 도어맨
첫째 줄에 정인이가 기억할 수 있는 가장 큰 차이 X<100이 주어진다. 둘째 줄에는 줄을 서 있는 순서가 주어진다. W는 여성, M은 남성을 나타내며, 길이는 최대 100이다. 가장 왼쪽에 있는 글자가 줄
www.acmicpc.net
맨 앞의 한 사람을 건너뛰고 손님들을 받을 수 있다는 조건을 잘 처리해야하는 문제이다.
건너뛴 손님을 저장할 변수와 남녀 수의 차이를 저장할 변수를 하나 만들고, 남녀 수의 차이가 도어맨이 기억하지 못하는 범위에 도달할 때마다 건너뛴 손님이 있었는지, 있었다면 지금 이 손님을 입장시켜도 되는지 등을 신경써 구현하면 해결할 수 있는 문제이다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int X; cin >> X;
string s; cin >> s;
int diff = 0;
char save = ' ';
int ans = 0;
for (auto c : s) {
if (c == 'M') {
if (diff != X) diff++;
else {
if (save == 'M') break;
else if (save == ' ') save = 'M';
else {
save = ' ';
}
}
}
else { // c == 'W'
if (diff != -X) diff--;
else {
if (save == 'W') break;
else if (save == ' ') save = 'W';
else {
save = ' ';
}
}
}
ans++;
}
if (save == ' ') cout << ans;
else if (save == 'M') {
if (diff == X) cout << ans - 1;
else cout << ans;
}
else { // save == 'W'
if (diff == -X) cout << ans - 1;
else cout << ans;
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 16953 // C++] A → B (0) | 2021.06.24 |
---|---|
[BOJ 5000 // C++] 빵 정렬 (0) | 2021.06.23 |
[BOJ 1111 // C++] IQ Test (0) | 2021.06.21 |
[BOJ 5397 // C++] 키로거 (0) | 2021.06.20 |
[BOJ 1666 // C++] 최대 증가 직사각형 집합 (0) | 2021.06.19 |