[c++] BOJ 14906 :: ์Šค๋Ÿฌํ”ผ(Slurpys)

๋ฌธ์ œ

์Šค๋Ÿฌํ”ผ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์Šค๋Ÿฌํ”ผ(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