๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€

#2607

by flowing1ife 2023. 3. 30.
  • ๋ฌธ์ œ

์˜๋ฌธ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋‘ ๋‹จ์–ด๊ฐ€ ๋‹ค์Œ์˜ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ๊ฐ™์€ ๊ตฌ์„ฑ์„ ๊ฐ–๋Š”๋‹ค๊ณ  ๋งํ•œ๋‹ค.

  1. ๋‘ ๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  2. ๊ฐ™์€ ๋ฌธ์ž๋Š” ๊ฐ™์€ ๊ฐœ์ˆ˜ ๋งŒํผ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด "DOG"์™€ "GOD"์€ ๋‘˜ ๋‹ค 'D', 'G', 'O' ์„ธ ์ข…๋ฅ˜์˜ ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ์–‘์ชฝ ๋ชจ๋‘ 'D', 'G', 'O' ๊ฐ€ ํ•˜๋‚˜์”ฉ ์žˆ์œผ๋ฏ€๋กœ ์ด ๋‘˜์€ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ๊ฐ–๋Š”๋‹ค. ํ•˜์ง€๋งŒ "GOD"๊ณผ "GOOD"์˜ ๊ฒฝ์šฐ "GOD"์—๋Š” 'O'๊ฐ€ ํ•˜๋‚˜, "GOOD"์—๋Š” 'O'๊ฐ€ ๋‘ ๊ฐœ ์žˆ์œผ๋ฏ€๋กœ ์ด ๋‘˜์€ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์„ ๊ฐ–๋Š”๋‹ค.

๋‘ ๋‹จ์–ด๊ฐ€ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ, ๋˜๋Š” ํ•œ ๋‹จ์–ด์—์„œ ํ•œ ๋ฌธ์ž๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜, ๋นผ๊ฑฐ๋‚˜, ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ๋ฐ”๊พธ์–ด ๋‚˜๋จธ์ง€ ํ•œ ๋‹จ์–ด์™€ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ๊ฐ–๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์— ์ด๋“ค ๋‘ ๋‹จ์–ด๋ฅผ ์„œ๋กœ ๋น„์Šทํ•œ ๋‹จ์–ด๋ผ๊ณ  ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด "DOG"์™€ "GOD"์€ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ๊ฐ€์ง€๋ฏ€๋กœ ์ด ๋‘˜์€ ๋น„์Šทํ•œ ๋‹จ์–ด์ด๋‹ค. ๋˜ํ•œ "GOD"์—์„œ 'O'๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๋ฉด "GOOD" ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ๊ฐ–๊ฒŒ ๋˜๋ฏ€๋กœ ์ด ๋‘˜ ๋˜ํ•œ ๋น„์Šทํ•œ ๋‹จ์–ด์ด๋‹ค. ํ•˜์ง€๋งŒ "DOG"์—์„œ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜, ๋นผ๊ฑฐ๋‚˜, ๋ฐ”๊พธ์–ด๋„ "DOLL"๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์ด ๋˜์ง€๋Š” ์•Š์œผ๋ฏ€๋กœ "DOG"๊ณผ "DOLL"์€ ๋น„์Šทํ•œ ๋‹จ์–ด๊ฐ€ ์•„๋‹ˆ๋‹ค.

์ž…๋ ฅ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด์™€ ๋น„์Šทํ•œ ๋‹จ์–ด๊ฐ€ ๋ชจ๋‘ ๋ช‡ ๊ฐœ์ธ์ง€ ์ฐพ์•„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

  • ์ฝ”๋“œ
#include <iostream>
#include <vector>

using namespace std;

vector<int> cmpChar(vector<int> alp, string& s) { //๋ฌธ์ž ํ•˜๋‚˜์”ฉ ๋น„๊ต
	vector<int> alp_t = alp;
	for (int i = 0; i < s.size(); i++) {
		alp_t[s[i] - 'A'] -= 1;
	}
	return alp_t;
}

//๋น„์Šทํ•œ ๋ฌธ์ž์ธ์ง€ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
bool sameWord(vector<int>& alp, string& s, string& word) {
	int num = 0;
	vector<int> test = cmpChar(alp, s);
	for (int i = 0; i < 26; i++) {
		num += abs(test[i]);
	}

	//๋ฌธ์ž ๊ธธ์ด๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ -> ๊ฐ™์€ ๊ตฌ์„ฑ or ํ•œ ๋‹จ์–ด ๋ฐ”๊พธ์—ˆ์„ ๋•Œ
	if (word.size() == s.size()) {
		return (num == 2 || num == 0); //num์ด 2์ด๋ฉด ๋ฐ”๊พผ ๊ฒฝ์šฐ, ๊ทธ ์ด์ƒ์ด๋ฉด ๊ฐ™์€ ๊ตฌ์„ฑ์ด๋ฏ€๋กœ
	}
	else if ((word.size() + 1 == s.size())|| (word.size() - 1 == s.size())) { // ๋ฌธ์ž ๊ธธ์ด๊ฐ€ +1์ธ๊ฒฝ์šฐ -> ํ•œ ๋‹จ์–ด ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ , ๋ฌธ์ž ๊ธธ์ด๊ฐ€ -1์ธ๊ฒฝ์šฐ -> ํ•œ ๋‹จ์–ด ๋บ์„ ๋•Œ
		return (num == 1);
	}


	return false; //์œ„์˜ ๊ฒฝ์šฐ์— ๋ชจ๋‘ ํ•ด๋‹น์ด ๋˜์ง€ ์•Š์œผ๋ฉด false
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, ans = 0;
	vector<int> alp(26, 0);
	string word;

	//์ž…๋ ฅ
	cin >> n;
	cin >> word;
	n--;

	//์—ฐ์‚ฐ
	for (int i = 0; i < word.size(); i++) { // ์•ŒํŒŒ๋ฒณ ์ˆ˜๋งŒํผ ์ฆ๊ฐ€
		alp[word[i] - 'A'] += 1;
	}

	while (n--) {
		string s;
		cin >> s;

		if (sameWord(alp, s, word)) {
			ans++;
		}
	}

	//์ถœ๋ ฅ
	cout << ans;

	return 0;
}
  • ํ•ด์„ค

1. cmpChar ํ•จ์ˆ˜

: ๋ฌธ์ž ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•˜์—ฌ ๋™์ผํ•œ ๋ฌธ์ž๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๋Š” ํ•จ์ˆ˜

- ์ž…๋ ฅ๋œ string s์˜ ๋ฌธ์ž ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ๊ทธ ๋ฌธ์ž์— ํ•ด๋‹นํ•˜๋Š” alp๋ฒกํ„ฐ์˜ ๊ฐ’์„ -1์”ฉ ๊ฐ์†Œ

 

2. sameWord ํ•จ์ˆ˜

: ๋น„์Šทํ•œ ๋ฌธ์ž์ธ์ง€ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜

- cmpChar ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ธฐ์ค€ ๋ฌธ์ž์—ด๊ณผ ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ƒ์‡„์‹œํ‚จ ๋ฐฐ์—ด์„ ์ „๋‹ฌ๋ฐ›์Œ

- cmpChar ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐ ๋ฐ›์€ ์ˆ˜๋ฅผ ๋ชจ๋‘ ํ•ฉํ•˜์—ฌ num์— ์ €์žฅ

- ๋งŒ์•ฝ ๊ธฐ์ค€ ๋ฌธ์ž์—ด๊ณผ ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ, ๊ฐ™์€ ๊ตฌ์„ฑ์ด๊ฑฐ๋‚˜ ํ•œ ๋‹จ์–ด ๋ฐ”๋€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ์Œ

- ๊ฐ™์€ ๊ตฌ์„ฑ์˜ ๊ฒฝ์šฐ, num์€ 0์ผ ๊ฒƒ์ด๊ณ  ํ•œ ๋‹จ์–ด ๋ฐ”๊พผ ๊ฒฝ์šฐ num์€ 2์ผ ๊ฒƒ

- ๋งŒ์•ฝ ์ž…๋ ฅ ๋ฐ›์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ธฐ์ค€ ๋ฌธ์ž์—ด์˜ +1์ด๋ฉด ํ•œ ๋‹จ์–ด ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ, -1์ด๋ฉด ํ•œ ๋‹จ์–ด ๋บ์„ ๊ฒฝ์šฐ ๋น„์Šทํ•œ ๋ฌธ์ž์ผ ๊ฒƒ

- ์œ„์˜ ๊ฒฝ์šฐ num์€ 1์ด์–ด์•ผํ•จ

- ์œ„์˜ ๊ฒฝ์šฐ์— ๋ชจ๋‘ ํ•ด๋‹น์ด ๋˜์ง€ ์•Š์œผ๋ฉด ๋น„์Šทํ•œ ๋ฌธ์ž๊ฐ€ ์•„๋‹˜

 

3. main ํ•จ์ˆ˜

- cin, cout ์†๋„ ๋†’์ด๋Š” ์ฝ”๋“œ ์ž‘์„ฑ

- ๊ธฐ์ค€ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ ๋ฐ›๊ณ  ๊ธฐ์ค€ ๋ฌธ์ž์—ด์˜ ๊ฐ ์•ŒํŒŒ๋ฒณ์— ํ•ด๋‹นํ•˜๋Š” alp ๋ฒกํ„ฐ์˜ ์ˆ˜๋ฅผ ๊ฐœ์ˆ˜๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ด

- n-1ํšŒ๋งŒํผ sameWord ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•จ

- ๋งŒ์•ฝ sameWord๊ฐ€ true๋ฅผ returnํ•˜๋ฉด ans ๊ฐ’์„ 1์”ฉ ์ฆ๊ฐ€ ์‹œํ‚ด

- ans๋ฅผ ์ถœ๋ ฅํ•จ

'์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป > ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BAEKZOON] 2840. ํ–‰์šด์˜ ๋ฐ”ํ€ด  (1) 2024.03.14
#14235  (0) 2023.03.30
#2075  (0) 2023.03.30
#1655  (0) 2023.03.30
#1063  (0) 2023.03.21