๐Ÿ‘‘1062 ๊ฐ€๋ฅด์นจ. ๊ฐœ์„ ํ•  ๋ถ€๋ถ„

phoenixKimยท2022๋…„ 9์›” 6์ผ
0

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

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

์ž˜๋ชป๋œ ์  241107

: ๋ฐฑํŠธ๋ž˜ํ‚น์—์„œ ์กฐ๊ฑด๋ถ€๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐฑ์‹ ์šฉ ๋ณ€์ˆ˜๋Š” ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ ,
์ธ์ž๋กœ ๋ณด๋‚ด์„œ ์ฒ˜๋ฆฌํ•˜์ž.

  • ์นด์šดํŒ…ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋งค๋ฒˆ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ. ์กฐ๊ฑด์‹์„ ํ†ตํ•ด ํ•ด์•ผ ํ•œ๋‹ค.

์ตœ๊ทผ ํ’€์ด 240127

: ์กฐํ•ฉ์œผ๋กœ ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋ญ๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ...
-> ๋‚˜๋Š” 21๊ฐœ ์ค‘์—์„œ k - 5๊ฐœ๋งŒํผ ์กฐํ•ฉ์„ ๊ตฌํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ,,,,
์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„ ์—„์ฒญ ์ปค์ง.

https://velog.io/@ssssujini99/%EB%B0%B1%EC%A4%80C1062%EB%B2%88%EA%B0%80%EB%A5%B4%EC%B9%A8

  • ์ฐธ๊ณ  ์‚ฌ์ดํŠธ์ด๊ณ , ๋ฌธ์ž ์ž…๋ ฅ๋ฐ›์„ ๋•Œ , a n t i c ๋ฅผ ์ œ์™ธํ•œ ๋ฌธ์ž๋ฅผ ์–ป์Œ.
    ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, ์—ฌ๊ธฐ์„œ, ๋นจ๊ฐ„์ƒ‰ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์กฐํ•ฉ์„ ํ•ด์•ผํ•จ.
    ์ฆ‰, rhelo ๋ฅผ ๊ฐ€์ง€๊ณ  ์กฐํ•ฉ์„ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€์•ผ ํ•จ...
    5 ๊ฐœ ์ค‘์—์„œ k - 5 ๋งŒํผ์˜ ์กฐํ•ฉ์„ ์ง„ํ–‰ํ•˜๊ณ , ์—ฌ๊ธฐ์„œ k - 5 ๋Š” 1์ž„.
    ์กฐํ•ฉ์„ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ 5๊ฐœ๋งŒ ํผ ์ค‘ 1๊ฐœ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ,
    vector arr[5] = { 0,0,0,0,1 } ๋†“๊ณ , sort ๊นŒ์ง€ ํ•œ ์ƒํƒœ์—์„œ ์กฐํ•ฉ ์ง„ํ–‰ํ•˜์ž.

#include <chrono>  // std::chrono::miliseconds
#include <iostream>
#include <mutex>
#include <queue>
#include <string>
#include <thread>
#include <vector>
using namespace std;
#include <condition_variable>
#include <shared_mutex>

#include <unordered_map>
#include <algorithm>


int main()
{
	// a n t a t i c a 
	// a n t i c -> ์—ฌ๊ธฐ 5๊ฐ€์ง€๋Š” ๋ฌด์กฐ๊ฑด ์•Œ์•„์•ผ ํ•จ.

	// 26 - 5 ์ค‘ 21๊ฐœ์—์„œ ( k - 5 ) ๋งŒํผ์˜ ์กฐํ•ฉ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•จ.

	// k๊ฐ€ 6 ์ด๋ผ๋ฉด 21๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์ค‘์—์„œ 1๊ฐœ๋ฅผ ์„ ํƒํ•ด์„œ ์กฐํ•ฉ

	// 5๊ฐœ ๊ธ€์ž๋Š” ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์•Œ์•„์•ผ๋งŒ 
	// ๋‹จ์–ด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Œ. 

	// antatica ์ž…๋ ฅ์ด ์ตœ์†Œํ•œ์˜ ๋‹จ์–ด๋ฐฐ์—ด๋ฆฌ๊ณ 

	// k๊ฐ€ 5 ๋ฏธ๋งŒ์ด๋ฉด 0์ถœ๋ ฅ ๋.

	// b x d e f g h j k 

	int n, k;
	cin >> n >> k;

	int arr[26] = { 0, };
	

	if (k < 5)
	{
		cout << 0;
		return 0;
	}
	else
	{
		vector<string> word(n);

		for (int i = 0; i < n; ++i)
		{
			cin >> word[i];
		}


		// a n t i c ๋ฅผ ํ™•๋ณดํ•œ ์ƒํƒœ์—์„œ 
		// 21 ๊ฐœ ์ค‘์—์„œ ์กฐํ•ฉ์„ ๋Œ๋ฆฌ๊ณ  ์‹ถ์Œ. 
		// b, d , e, f, g, h, j, k ,l ,m , o, p, 
		// q, r, s, u ,v, w, x, y ,z 


		// ์–ด๋–ป๊ฒŒ ํ•  ๊ฑฐ๋ƒ๋ฉด ๋ฒกํ„ฐ์— ๋„ฃ๊ณ , 
		// next_permutation ๋Œ๋ฆฌ๋ฉด์„œ 
		// k - 5 ๋งŒํผ์„ for๋ฌธ์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฑธ๋กœ 
		vector<char> c = { 'b', 'd' ,
			'e', 'f', 'g', 'h', 'j', 'k' ,'l'
			,'m' , 'o', 'p',  'q', 'r', 's', 'u'
			,'v', 'w', 'x', 'y' ,'z' };
		sort(c.begin(), c.end());
		int cnt = k - 5;
		//unordered_map<char, bool> check;
		//check['a'] = true;
		//check['n'] = true;
		//check['t'] = true;
		//check['i'] = true;
		//check['c'] = true;

		vector<bool> check(26, false);
		check['a' - 'a'] = true;
		check['n' - 'a'] = true;
		check['t' - 'a'] = true;
		check['i' - 'a'] = true;
		check['c' - 'a'] = true;


		int res = 0;

		do
		{
			
			for (int i = 0; i < cnt; ++i)
			{
				check[c[i] - 'a'] = true;		
			}

			int ccnt = 0;

			// ๋‹จ์–ด ์ „์ฒด ๋Œ๋ฆฌ๊ธฐ.
			for (int k = 0; k < word.size(); ++k)
			{
				bool br = false;
				// ๋‹จ์–ด ํ•œ๊ธ€์ž์”ฉ ํ™•์ธํ•˜๊ธฐ.
				for (int l = 0; l < word[k].size(); ++l)
				{
					if (check[word[k][l] - 'a'] == false)
					{
						br = true;
						break;
					}
				}
				if (br == false)
				{
					++ccnt;
				}
			}

			for (int i = 0; i < cnt; ++i)
			{
				// ์›๋ณต.
				check[c[i] - 'a'] = false;
			}

			res = max(res, ccnt);

		} while (next_permutation(c.begin(), c.end()));

		cout << res << endl;

	}


}

์ตœ์ข… ์ฝ”๋“œ

http://boj.kr/223b0a3a54894c7cbd71ab6e56552732

  • ํ’€์ด ์‹œ๊ฐ„ : 220908 18:10 ~ 19:22

๐Ÿ™‰๊ฐœ์„ ํ•  ์ .

1) ์ผ๋‹จ์€ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด์„œ ์ ‘๊ทผํ•˜์ž.
2) ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ฑธ๋ฆฌ๋ฉด, ํƒ€์ดํŠธ ํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๊ณ .

-> ๋Š๋‚€์ .
: ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ–ˆ์Œ.
๊ทธ๋ƒฅ a n t i c ์ œ์™ธํ•˜๊ณ  26 - 5 ์ค‘์—์„œ k - 5 ๋งŒํผ ๋‹ค ๋Œ๋ฆฐ ๋‹ค์Œ์—
string ๋ฒกํ„ฐ์™€ ํ™•์ธํ•˜๋Š” ์‹์œผ๋กœ ํ•˜์ž.

๐Ÿ™‰์ค‘์š”ํ•œ ๋ถ€๋ถ„

3) ์กฐํ•ฉ ์•ˆ์—์„œ ์ฒดํฌ ๋ณ€์ˆ˜ ํ™•์ธํ•˜๋ ค๊ณ  ๋˜ 26๊ฐœ ๋Œ๋ฆฌ๋ฉด์„œ ํ™•์ธํ–ˆ๋Š”๋ฐ,
์ด๋Ÿฌ์ง€ ๋ง๊ณ , ์ด๋Ÿฐ์‹์œผ๋กœ ํ™•์ธํ•˜์ž.

  • ๋‚ด์šฉ : ์ด๋ฏธ ๋‚ด๊ฐ€ ๋ถˆ์ฒดํฌ ํ‘œ์‹œ๋ฅผ ํ–ˆ์œผ๋ฏ€๋กœ,
    ํ•ด๋‹น rc , hello, car ์— ๋Œ€ํ•œ ๋ถˆ๋ณ€์ˆ˜๊ฐ€ true์ธ์ง€ ํ™•์ธ๋งŒ ํ•˜๋ฉด ๋จ!

  • ๊ฐœ์„ ๋œ ์ฝ”๋“œ

  • ์ข‹์ง€ ๋ชปํ•œ , ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ฆ๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ

93ํผ์—์„œ ํ‹€๋ฆผ.

http://boj.kr/30cc1e4a3ba64679a68e2c5474d5e09f

  • ์  ์žฅ..!
    ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ž˜๋ชป ์ž‘์„ฑํ•œ ๋ถ€๋ถ„์ด ์žˆ์Œ.

    ๋ฌธ์ œ์—์„œ 8๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ฆ‰
    antatica ๊ฐ€์šด๋ฐ์— ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋“ค์–ด ์˜ฌ์ˆ˜ ์žˆ๋‹ค๋Š” ์†Œ๋ฆฌ์ž„.
    ๊ทผ๋ฐ ๋‚˜๋Š” ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ,, ํ•œ ๋ถ€๋ถ„์„ ์ž˜๋ชป ์ž‘์„ฑํ–ˆ์Œ.

    -์ž˜๋ชป ์ž‘์„ฑํ•œ ๋ถ€๋ถ„

    -antic ์ด 5๊ฐœ ์ด๋ฏ€๋กœ, k - 5 < 0 ์œผ๋กœ ํ•ด์•ผํ•จ.
    ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋“ค์–ด์˜ค๋ฉด antatica ์ฆ‰ 5๊ฐœ๊ฐ€ ๋ชจ๋‘ ์“ฐ์˜€๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ...

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

: ์กฐํ•ฉ์œผ๋กœ ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ๋ณต์žกํ•จ...

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

// 1062๋ฒˆ. ๊ฐ€๋ฅด์นจ.
// 19:55 ~ 

int n, k;
bool ccnt[26];

//๋งต์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ๋น ๋ฅผ ๋“ฏํ•œ๋ฐ? 
vector<char>temp;

map<char, bool>ttemp;

int result = -1;

void combi(vector<string>&v , vector<char>& word , int start)
{
	if (ttemp.size() == k)
	{
		// ์—ฌ๊ธฐ์„œ v์™€ ๋น„๊ต ์ฒ˜๋ฆฌํ•˜์ž. 
		bool ccheck = false;
		int cnt = 0;
		for (int a = 0; a < v.size(); ++a)
		{
			int ssize = v[a].size();

			for (auto iter : v[a])
			{
				if (ttemp.find(iter) == ttemp.end())
				{
					ccheck = true;
					break;
				}
			}
			if (ccheck == false)
				++cnt;

		}
		result = max(result, cnt);

		return;
	}


	for (int i = start; i < word.size(); ++i)
	{
		ttemp.insert(make_pair(word[i], true));

		//temp.push_back(word[i]);
		combi(v, word, i + 1);
		//temp.pop_back();

		ttemp.erase(word[i]);

	}

}





int main()
{
	
	cin >> n >> k;

	// 6๊ฐœ์˜ ๊ธ€์ž๋ฅผ ๊ฐ€๋ฅด์นจ.

	

	// anta , tica 
	// a n t i c -> antatica๋กœ๋งŒ 5๊ฐœ๊ฐ€ ์†Œ์š”๋˜๋ฏ€๋กœ
	// k = 6 - 5 : 1๊ฐœ์˜ ๊ธ€์ž๋งŒ ๋ฐฐ์šธ์ˆ˜ ์žˆ์Œ. 
	// c๋ฅผ ๋ฐฐ์šฐ๋ฉด. 
	
	// rc, car ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ.

	// a n t i c ๋ฅผ ์ œ์™ธํ•œ ๊ธ€์ž๋“ค ์ค‘์—์„œ . ์ฆ‰, 26 - 5๊ฐœ์˜ ๊ธ€์ž์ค‘์—์„œ
	// k - 5๋งŒํผ์˜ ์กฐํ•ฉ์„ ๋Œ๋ ค์„œ 
	
	// ์ฒดํฌ ๋ณ€์ˆ˜์—์„œ ๋ฝ‘์€ ๊ธ€์ž์˜ ์›์†Œ๊ฐ’ ์„ ์ด์šฉํ•ด true๋กœ ์„ค์ •ํ•˜๊ณ , 
	// ๋ชจ๋‘๋‹ค true ์ด๋ฉด ์นด์šดํŒ…์„ ์ง„ํ–‰
	// ์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์นด์šดํŒ…์˜ ์ตœ๋Œ€๊ฐ’์„ ์ถ”์ถœํ•˜์ž. 

	ccnt['a' - 'a'] = true;
	ccnt['n' - 'a'] = true;
	ccnt['t' - 'a'] = true;
	ccnt['i' - 'a'] = true;
	ccnt['c' - 'a'] = true;

	vector<string>v(n);
	for (int i = 0; i < n; ++i)
	{
		cin >> v[i];

		// ์•ž์— ์œ„์น˜ํ•จ anta , ๋’ค์— ์œ„์น˜ํ•œ tica๋ฅผ ๋บŒ.
		string s1 = v[i].substr(4 , v[i].length() - 8);
		//cout << "output" << endl;
		//cout << s1 << endl;

		v[i] = s1;
		for (auto iter : s1)
		{
			ccnt[iter - 'a'] = true;
		}
		//cout << v[i] << endl;
	}

	vector<char>ww;

	for (int i = 0; i < 26; ++i)
	{
		if (ccnt[i] == true && i != 'a' - 'a'
			&& i != 'n' - 'a' && i != 't' - 'a'
			&& i != 'i' - 'a' && i != 'c' - 'a')
		{
			char c = i + 'a';
			ww.push_back(c);
			cout << c << endl;
		}
	}

	// a n t i c
	if (k - 5 <= 0)
		return 0;

	k -= 5;


	// ww ์— ๋“ค์–ด์žˆ๋Š” ์›์†Œ๋“ค ์ค‘์—์„œ num๋ฅผ ๊บผ๋‚ด ๋Œ๋ฆฌ๋ฉด์„œ 
	// ๋ชจ๋‘ ์ผ์น˜ํ•˜๋ฉด ok.

	// rc    -> r
	// hello -> h e l o  
	// car   -> r
	// ์—ฌ๊ธฐ ์žˆ๋Š” ๋‹จ์–ด๋“ค๋กœ ๋ฒกํ„ฐ์— ๋„ฃ์€ ๋‹ค์Œ์— 
	// ์กฐํ•ฉ ๋Œ๋ฆฌ๋ฉด์„œ ์ตœ๋Œ€๊ฐ’ ํ™•์ธํ•˜๊ธฐ 
	

	combi(v, ww, 0);
	cout << result;
}
profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

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

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