๐Ÿคข9935๋ฒˆ. ๋ฌธ์ž์—ด ํญ๋ฐœ _์ œ์‹œ์‚ฌํ•ญ์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๊ณ , ํ•ญ์ƒ ๊ณ ๋ คํ•ด์•ผ ํ•จ.

phoenixKimยท2022๋…„ 7์›” 27์ผ
1

๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
47/174

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

: string, ์Šคํƒ

๐Ÿฅถ์–ด๋–ป๊ฒŒ ํ’€๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•ด

: ๋งŒ์•ฝ์— ํ•œ์ž๋ฆฌ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ฐจ๋ฉด
๋‚ด๊ฐ€ ๋งŒ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ž‘์ด ์•ˆ๋จ.

mirkovC4nizCC44
m

์•„๋ฌด์ƒ๊ฐ ์—†์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์•ˆ๋จ.

๐Ÿฅถ51์  ์ฝ”๋“œ

  • ๋ฐ˜๋ก€ bbbbb / b
  • ์™œ ์ด๋ ‡๊ฒŒ ์ง  ๊ฒƒ์ธ๊ฐ€?
    : ํญ๋ฐœ๋ฌธ์ž์—ด์ด ํ•œ์ž๋ฆฟ์ˆ˜์ธ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ๋ชปํ•จ.
    -> ์‹œ์ž‘๋ถ€ํ„ฐ ์ž˜๋ชป๋จ.

์ž˜๋ชป๋œ ๋ถ€๋ถ„

ํ•œ์ž๋ฆฌ์ธ ๊ฒƒ์„ ์บ์น˜๋ฅผ ํ–ˆ๋‹ค๋ฉด, ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜์ง€๋Š” ์•Š์•˜์„ ๊ฒƒ์ž„.

#include <iostream>
using namespace std;
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
#include <map>
#include <stack>

// 02:00 ~ 
// ๋ฌธ์ž์—ด ํญ๋ฐœ

int main()
{
	// ๋‚จ์€ ๋ฌธ์ž์—ด์„ ์ด์–ด๋ถ™์ž„. 


	// ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ๋ฐฑ๋งŒ ์ดํ•˜์ž„. 
	
	string target;
	cin >> target;

	string s;
	cin >> s;

	// s์˜ back์ด๋ž‘ ํ•˜๋‚˜์˜ iter๊ฐ€ ๋™์ผ ํ•˜๋‹ค๋ฉด
	// s์˜ ๋ฌธ์ž์—ด๋งŒํผ ์•ž์œผ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ๋น„๊ต๋ฅผ ํ•˜์ž. 

	// 12ab112ab
	// 11ab ๋ผ๋ฉด? 
	// temp ๋ณ€์ˆ˜์—๋‹ค๊ฐ€ ์ €์žฅํ•ด๋†“๊ณ , 
	// ๋ฆฌ๋ฒ„์Šค ํ•ด์„œ ๋‹ค์‹œ ๋ฐ˜ํ™˜? 
	// ์‹คํ—˜์„ ํ•ด๋ณด์•„์•ผ ํ•  ๋“ฏํ•จ. 

	stack<char>stk;

	for (int i = 0; i < target.length(); ++i)
	{
		// ๋งค์นญ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•จ.
		string temp = "";
		if (!stk.empty() && target[i] == s.back())
		{
			// ์Šคํƒ์— ์Œ“์—ฌ ์žˆ๋Š” ๊ฑฐ๋ž‘ ํ™•์ธํ•˜๊ธฐ 
			bool check = false;
			for (int j = s.length() - 2; j >= 0; --j)
			{
				if (stk.top() == s[j])
				{
					temp += stk.top();
					stk.pop();
				}
				else
				{
					//ํ•˜๋‚˜๋ผ๋„ ์–ด๊ธ‹ ๋‚˜๋ฉด ๋ถˆ์ผ์น˜ ํ•˜๋‹ค๋Š” ๊ฒƒ์ž„. 
					check = true;

					// ์Šคํƒ์—์„œ ๋บ€ ๊ฒƒ ๋งŒํผ์„
					// ๋ฆฌ๋ฒ„์Šคํ•ด์„œ ๋‹ค์‹œ pushํ•˜์ž. 
					reverse(temp.begin(), temp.end());
					for (int a = 0; a < temp.length(); ++a)
					{
						stk.push(temp[a]);
					}

					break;
				}
			}
			// ๋งค์นญ์ด ๋  ๊ฒฝ์šฐ, ๋ฐ‘์˜ ํ‘ธ์‰ฌ ์•ˆํ•˜๊ณ , ๋‹ค์Œ์›์†Œ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ
			
			if(check == false)
			continue;
		}

		stk.push(target[i]);
	}

	string res = "";

	while (!stk.empty())
	{
		res += stk.top();
		stk.pop();
	}

	if (res.empty())
	{
		cout << "FRULA";
		return 0;
	}
	
	reverse(res.begin(), res.end());
	cout << res;
}

๐Ÿ’šfind๋กœ ์ ‘๊ทผํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐœ์ƒํ•จ.

: ์™œ๋ƒํ•˜๋ฉด ๋ฌธ์ž์—ด ๊ธธ์ด 100๋งŒ ๊นŒ์ง€์ด๋ฏ€๋กœ

๐Ÿ’šํ’€์ด ์ „๋žต

: ์ง์„ ์ง€์–ด์„œ , ๋ฌธ์ž์—ด์„ ์ง€์šฐ๋Š” ๋ฌธ์ œ์ž„.

  • 1) ํƒ€๊ฒŸ์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ์›์†Œ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด,
    ์–ด๋–ค temp์—๋‹ค๊ฐ€ ํƒ€๊ฒŸ์ˆ˜๋งŒํผ์˜ ์›์†Œ๋ฅผ ์ €์žฅ์‹œํ‚ด.
  • 2) ๋งŒ์•ฝ temp์™€ ํƒ€๊ฒŸ์ด ์ผ์น˜ํ•œ๋‹ค๋ฉด ์ œ๊ฑฐํ•˜๊ณ ,
    ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, ๋ฆฌ๋ฒ„์Šคํ•ด์„œ ๋‹ค์‹œ ์‚ฝ์ž…์„ ํ•จ.

๐Ÿ’š์ฃผ์˜ํ•  ์ .

: ํƒ€๊ฒŸ์˜ ๊ฐฏ์ˆ˜๋งŒํผ์„ ์Šคํƒ์—์„œ ํŒ์„ ํ•  ๊ฒƒ์ด๋ฏ€๋กœ,
ํƒ€๊ฒŸ์˜ ์‚ฌ์ด์ฆˆ์™€ ๋™์ผํ•˜๊ฑฐ๋‚˜ ํฐ ์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ.

๐Ÿ’š์™œ ์Šคํƒ์ด๋ƒ?

https://velog.io/@kwt0124/%ED%8F%AD%EB%B0%9C-%EC%A7%9D%EC%A7%93%EA%B8%B0-%EB%AC%B8%EC%A0%9C

์ฒซ๋ฒˆ์งธ ํ’€์ด

: ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐœ์ƒํ•จ.

#include <iostream>
#include <vector>
#include <string>
using namespace std;


int main()
{
	string s;
	cin >> s;

	string target;
	cin >> target;

	int idx = 0;

	// ํƒ€๊ฒŸ ๋ชป์ฐพ์„ ๊ฒฝ์šฐ ๋›ฐ์ณ๋‚˜์˜ด. 
	while (s.find(target) != string::npos)
	{
		auto iter = s.find(target); //๋ฐœ๊ฒฌ๋œ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ„.
		//cout << "์ฐพ์Œ." <<  iter << endl;
		string ss = s.substr(0, iter);
		int next = ss.length() + target.length();	
		s = ss + s.substr(next);
		//cout << s << endl;		
	}

	//cout << "result : " << endl;
	if (s.empty())
	{
		cout << "FURLA";
	}
	else
		cout << s;
	
}

-> ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์–ด์•ผ ํ•จ.
๊ทธ๋ฆฌ๋”” ํ•˜์ง€ ๋ชปํ–ˆ์Œ.

๊ณ ์ฐฐ : ์™œ ํ‹€๋ ธ์„๊นŒ?

  • ์‹œ๊ฐ„ ์ดˆ๊ณผ
    : ์™œ๋ƒํ•˜๋ฉด ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ๊น€. -> logN์˜ ๋น„์šฉ์„ ๊ฐ€์ง€๊ณ  ์˜ค๋„๋ก ํ•ด์•ผํ•จ.

find๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค n์˜ ๋น„์šฉ์œผ๋กœ ์ฐพ๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฌธ์ œ์ž„.

  • ๊ฒฐ๊ณผ
    : ๋‹ค๋ฅธ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•จ.

๋ฌธ์ž์—ด ๋ฌธ์ œ๋Š”

  • substr,
  • size,
  • erase
    ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜์ž!

string์˜ find ์‹œ๊ฐ„ ๋ณต์žก๋„

https://rein.kr/blog/archives/373
: ์ข‹์ง€ ๋ชปํ•œ ๋“ฏ ํ•จ.

  • ์ฐพ์œผ๋ฉด ์ฐพ์€ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ ,
    ๋ชป์ฐพ์œผ๋ฉด , string::npos๋ฅผ ๋ฐ˜ํ™˜ํ•จ.

string์˜ erase

  • ์ฐธ๊ณ  ์ž๋ฃŒ : ์”น์–ด๋จน๋Š” c++
    https://modoocode.com/240

  • ์ฝ”๋“œ : ์ค‘์š”ํ•จ!

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int main() {
	std::string s = "This is an example";
	std::cout << s << '\n';

	// erase 
	// 1๋ฒˆ : size_t start ~ size_t end ๋ถ€๋ถ„๊นŒ์ง€์˜ ์ธ๋ฑ์Šค๋ฅผ 
	// ๋ถ€๋ถ„๋งŒ์„ ์ง€์›€!
	s.erase(0, 5);  // Erase "This "
	std::cout << s << '\n';

	//std::find ํ•จ์ˆ˜๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜ํ•จ.
	s.erase(std::find(s.begin(), s.end(), ' '));  // Erase ' '
	std::cout << s << '\n';
	
	// string.find ํ•จ์ˆ˜๋Š” 
	

	s.erase(s.find("pl"));  // Trim from ' ' to the end of the string
	std::cout << s << '\n';

	s.erase(7);
	cout << s << endl;

	auto iter = s.find(' ');
	
	//s.erase(s.find(' '));  // Trim from ' ' to the end of the string
	s.erase(iter);  // Trim from ' ' to the end of the string
	std::cout << s << '\n';
}
  • erase์˜ ์ •์˜
    - 1๋ฒˆ ์‚ฌ์šฉ : substr( size_t start, size_t cnt) ;
    : ์ฐธ์กฐํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๋“ฏํ•ด์„œ, ๋ฒ”์œ„ ๋งŒํผ์˜ ๋ฌธ์ž๊ฐ€ ์ง€์›Œ์ง.
    • 2๋ฒˆ ์‚ฌ์šฉ : substr( size_t idx);
      : idx ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์ „๋ถ€๋‹ค ์ง€์›€!
    • 3๋ฒˆ ์‚ฌ์šฉ : substr( const_iterator pos);
      : pos์œ„์น˜์— ์žˆ๋Š” ๋ฌธ์ž๋งŒ ์ง€์›€!

-> ๋Š๋‚€ ์ . erase ์˜ ์ธ์ž๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๋“ค์— ๋”ฐ๋ผ์„œ ์ง€์›Œ์ง€๋Š” ๋ฐฉ์‹์ด
๋ชจ๋‘ ๋‹ค๋ฆ„.

profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด