๋ฌธ์
์ค๋ฌํผ(Slurpy)๋ ๋ค์์์ ์ค๋ช ํ ์ด๋ ํ ์์ฑ์ด ์กด์ฌํ๋ ๋ฌธ์์ด์ ์ง์นญํ๋ค. ๋ฌธ์์ด์ ์ฝ์ด์ ์ค๋ฌํผ๊ฐ ์กด์ฌํ๋์ง๋ฅผ ํ๋จํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
ํ์ด
- ์ฐ์ Slump๋ ^([DE]F+)+G$ ์ ๊ท์์ผ๋ก ํํํ ์ ์๋ค.
- ๋๋ค๋ฅธ ์ฌ๋ฌํ๊ฐ ์ฌ ์ ์๋ค๋ ๊ฒ์ ์ฌ๋ฌํ ์ ๊ทํํ์์ +๋ฅผ ๋ถ์์ผ๋ก์จ 1๊ฐ ์ด์ ์ฌ ์ ์๋ค๊ณ ํํํ์๋ค.
- Slimp๋ ์ ๊ทํํ์์ผ๋ก ํํํ๊ธฐ ๋ณต์กํ์ฌ ์ฌ๊ท + ์กฐ๊ฑด์ ์ฌ์ฉํ์๋ค.
- AH์ธ์ง ๋จผ์ ์ฒดํฌํ๋ค.
- ์๋๋ผ๋ฉด ์์ด AB์ธ์ง ์ฒดํฌํ๋ค.
- ๋ง๋ค๋ฉด ๋ค์ C๋ฅผ ๋ผ๊ณ ์ค๋ฆผํ์ธ์ง ์ฒดํฌํ๋ค.
- ์๋๋ผ๋ฉด ๋ค์ C๋ฅผ ๋ผ๊ณ ์ค๋ผํ์ธ์ง ์ฒดํฌํ๋ค.
์ฝ๋
#include <iostream>
#include <regex>
#include <string>
#include <algorithm>
using namespace std;
bool isSlump(string str) { // D|E๋ก ์์, F|G๋ก ๋๋จ
regex slump("^([DE]F+)+G$");
return regex_match(str, slump);
}
bool isSlimp(string str) { // A๋ก ์์, H๋ C๋ก ๋๋จ
if (str[0] != 'A' || str.length() < 2) return false;
if (str.length() == 2) {
if (str[1] == 'H') return true;
else return false;
}
if (str[str.length() - 1] != 'C') return false;
if (str[1] == 'B') {
string trimString = str.substr(2, str.length() - 3);
return isSlimp(trimString);
}
else {
string trimString = str.substr(1, str.length() - 2);
return isSlump(trimString);
}
}
bool isSlurpy(string str) {
size_t lastIdx = 0;
while (1) {
size_t idx = min(str.find('H', lastIdx + 1), str.find('C', lastIdx + 1));
if (idx == string::npos) break;
if (isSlimp(str.substr(0, idx + 1)) && isSlump(str.substr(idx + 1))) {
return true;
}
lastIdx = idx;
}
return false;
}
int main() {
int N; cin >> N;
cout << "SLURPYS OUTPUT" << '\n';
while (N--) {
string str; cin >> str;
string result = isSlurpy(str) ? "YES" : "NO";
cout << result << '\n';
}
cout << "END OF OUTPUT" << '\n';
}
๊ฒฐ๊ณผ
๋ฐ์ํ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 9342 :: ์ผ์์ฒด (0) | 2021.11.03 |
---|---|
[c++] BOJ 1013 :: Contact (0) | 2021.10.17 |
[c++] BOJ 20040 :: ์ฌ์ดํด ๊ฒ์ (0) | 2021.10.10 |
[c++] BOJ 7579 :: ์ฑ (0) | 2021.10.10 |
[c++] BOJ 1501 :: ์์ด ์ฝ๊ธฐ (0) | 2021.10.07 |
Comment