๋ฌธ์
[์์ด ์ฝ๊ธฐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ]
ํน์ ์ธํฐ๋ท์ ํ๋ค๊ฐ, ๋ค์๊ณผ ๊ฐ์ ์์ ๋ฌธ์ฅ์ ๋ณธ ์ ์ด ์๋๊ฐ?
It is itnersetnig taht pepole can raed smoe grabeld wrods.
์๋์ ๋ฌธ์ฅ์ 'It is interesting that people can read some garbled words'์ด๋ค. ๊ฐ๊ฐ์ ๋จ์ด๋ค์ ์ ์ผ ์ฒซ ๋ฌธ์์ ์ ์ผ ๋ ๋ฌธ์๋ฅผ ์ ์ธํ๊ณ ๋ ์์๊ฐ ๋ค์์ฌ ์๋ค. ํ ๋ํ์์ ์ํํ ์ฐ๊ตฌ ์กฐ์ฌ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅด๋ฉด, (์์ด ๋จ์ด๋ฅผ ์๋ ์ฌ๋์ ๊ฒฝ์ฐ) ์ฒซ ๋ฌธ์์ ์ ์ผ ๋ ๋ฌธ์๊ฐ ์ผ์นํ๊ณ , ๊ทธ ์ฌ์ด์ ๋ฌธ์๋ค์ ์์๊ฐ ์ด๋ป๊ฒ ๋ค๋ฐ๋์ด ์๋๋ผ๋ ์ฝ๋ ๋ฐ ์ง์ฅ์ด ์๋ค๊ณ ํ๋ค.
๊ทธ๋ ๋ค๋ณด๋, ํ ๋จ์ด๊ฐ ์ฌ๋ฌ ๋จ์ด๋ก ํด์๋ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด abcde์ ๊ฐ์ ๋จ์ด๋, abcde, abdce, acbde, acdbe, adbce, adcbe ๊ฐ์ ๋จ์ด๋ค๋ก ํด์๋ ์๋ ์๋ค. ๋ฌผ๋ก ๊ฐ๊ฐ์ ๋จ์ด๋ค์ด ์ค์ ๋ก ์กด์ฌํ๋ ๋จ์ด(์ฌ์ ์ ์กด์ฌํ๋ ๋จ์ด)์ผ ๊ฒฝ์ฐ์๋ง ์๋ฏธ๊ฐ ์๋ค.
์์ด ๋ฌธ์ฅ์ด ์ฃผ์ด์ก์ ๋, ๊ทธ ๋ฌธ์ฅ์ ํด์ํ๋ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๊ฐ๊ฐ์ ๋จ์ด๋, ์ฒซ ๊ธ์์ ๋ ๊ธ์๊ฐ ์ผ์นํ๋ ๋ค๋ฅธ ๋จ์ด(์ฌ์ ์ ์กด์ฌํ๋)๋ก ํด์ํ ์ ์๋ค. ์์ด ๋ฌธ์ฅ์ ํ๋ ์ด์์ ๋จ์ด๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ๋จ์ด๋ค์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์๋ค.
ํ์ด
๋จ์ด์ ์ค๊ฐ ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ๋จ์ด๋ผ๊ณ ์ทจ๊ธํ๋ฏ๋ก ๋จ์ด์ ์ค๊ฐ ๋ถ๋ถ์ ์ ๋ ฌํ ๊ฒ์ ๋จ์ด ์งํฉ์ key๊ฐ ๋๋ค. ๋๊ฐ์ ๋จ์ด๊ฐ ๋ค์ด์ฌ ์๋ ์์ผ๋ฏ๋ก unordered_set์ผ๋ก ๊ฐ์ key๋ฅผ ๊ฐ์ง๋ ๋จ์ด๋ค์ ์ ์ฅํด๋ ํ, ๋ฌธ์ฅ์์ ๋จ์ด๋ฅผ ํ๋์ฉ ์ฒดํฌํ๋ฉด์ ๊ฐ์ key์ ํด๋นํ๋ ๋จ์ด์ ๊ฐ์๋ฅผ ๊ณฑํด์ฃผ๋ฉด ๋ฌธ์ฅ์ ํด์ํ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋์ค๊ฒ ๋๋ค.
์ฝ๋
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <vector>
#include <sstream>
using namespace std;
unordered_map<string, unordered_set<string>> wordSet; // number์๋ค๊ฐ ๊ฒน์น๋ ๋จ์ด๊ฐ ์์ ๊น๋ด ๋ฐ๊ฟ
int main() {
int N;
cin >> N;
while (N--) {
string word; cin >> word;
string original = word;
if(word.length() > 3){
sort(word.begin() + 1, word.end() - 1);
}
if (wordSet.find(word) == wordSet.end()) {
wordSet[word] = unordered_set<string>();
}
wordSet[word].insert(original);
}
int M; cin >> M;
cin.ignore(); // '\n' ์ ๊ฑฐํ๊ธฐ
while (M--) {
string word;
long long result = 1;
getline(cin, word);
size_t iter = word.find(' ');
vector<string> check;
stringstream ss(word);
string temp;
while (getline(ss, temp, ' '))
{
check.push_back(temp);
}
for(int i=0; i<check.size(); i++){
string target = check[i];
if(target.length() > 3){
sort(target.begin()+1, target.end()-1);
}
result *= wordSet[target].size();
}
cout << result << '\n';
}
}
- c++์์ ํ ์ค์ ํต์งธ๋ก ๋ฐ๊ณ space๋ฅผ ๊ตฌ๋ถ์๋ก ํ์ฌ ๋จ์ด๋ฅผ ์ถ์ถํ๋ ๊ณผ์ ์ด ์ฝ์ง ์๋ค. ๋จผ์ , cin ์ ๋ ฅ์ ๊ณต๋ฐฑ์ด๋ '\n' ๋ฌธ์๋ฅผ ๋ฒํผ์ ์ ์ฅํด๋๊ณ ๋ฌด์ํ ์ฑ ๋ณ์์ ์ ๋ ฅ๊ฐ์ ๋ฃ๊ธฐ ๋๋ฌธ์ cin ์ ๋ ฅ์ ๋ฐ๊ณ ๋๋ฉด ๋ฒํผ์ ๊ณต๋ฐฑ์ด๋ '\n' ๋ฌธ์๊ฐ ๋จ์์๊ฒ ๋๋ค. getline ํจ์๋ก ํ ์ค์ ์ ๋ ฅ์ ๋ฐ์ ์ ์์ง๋ง ํด๋น ํจ์๋ '\n'์ด ์ ๋ ฅ๋๋ฉด ์ข ๋ฃ๋๊ธฐ ๋๋ฌธ์ ๋จผ์ ์คํ๋ cin์ผ๋ก ์ธํด ๋ฒํผ์ ๋จ์์๋ '\n'๋ฌธ์๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
- ๋ฐ๋ผ์ cin ํ getline์ ์คํํ ๋๋ cin.ignore() ํจ์๋ฅผ ํตํด ๋ฒํผ๋ฅผ ๋น์ด ํ ์คํํด์ฃผ์ด์ผ ํ๋ค. ๋ํ, ํด๋น ๋ฌธ์ ์์ geline์ ํตํด ํ ์ค์ ํ๊บผ๋ฒ์ ๋ฐ๊ฒ ๋๋ฉด ๋ฒํผ์ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํด์ ๋ฐํ์์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๊ณต๋ฐฑ๋ฌธ์(' ')๋ฅผ ์ด์ฉํ์ฌ ๋จ์ด๋ง๋ค ๋์ด์ ๋ฐ๋ ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
- ๋จ์ด์ ๊ธธ์ด๊ฐ 2 ์ดํ์ธ ๊ฒฝ์ฐ๋ ๊ตณ์ด ์ ๋ ฌํ ํ์์์ด ์๊ธฐ ์์ ์ key๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ฒฐ๊ณผ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 20040 :: ์ฌ์ดํด ๊ฒ์ (0) | 2021.10.10 |
---|---|
[c++] BOJ 7579 :: ์ฑ (0) | 2021.10.10 |
[c++] BOJ 1253 :: ์ข๋ค (0) | 2021.09.28 |
[c++] BOJ 4195 :: ์น๊ตฌ ๋คํธ์ํฌ (0) | 2021.09.28 |
[c++] BOJ 5430 :: AC (0) | 2021.09.07 |
Comment