- ๋ฌธ์
์๋ฌธ ์ํ๋ฒณ ๋๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ ๋จ์ด๊ฐ ๋ค์์ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ๊ฐ์ ๊ตฌ์ฑ์ ๊ฐ๋๋ค๊ณ ๋งํ๋ค.
- ๋ ๊ฐ์ ๋จ์ด๊ฐ ๊ฐ์ ์ข ๋ฅ์ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๊ฐ์ ๋ฌธ์๋ ๊ฐ์ ๊ฐ์ ๋งํผ ์๋ค.
์๋ฅผ ๋ค์ด "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 |