※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts