[백준/BOJ] 백준 1501번 : 영어 읽기
2021. 11. 20. 16:31ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/1501
사전에 있는 단어를 "첫 번째 문자 + 첫 번째, 마지막 문자를 제외한 문자열을 정렬한 문자 + 마지막 문자"로 unordered_map에 등장 개수와 함께 저장한다. 그리고 해석할 문자열을 입력받아 stringstream을 이용하여 공백별로 쪼개어 문자들을 구하고 각각의 문자에 매치되는 개수를 확인하여 문제를 해결했다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <unordered_map>
#include <sstream>
using namespace std;
int n, m;
unordered_map<string, int> word;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n;
cin.ignore();
for (int i = 0; i < n; i++)
{
string input;
cin >> input;
cin.ignore();
if (input.size() > 3)
{
char left = input[0];
char right = input[input.size() - 1];
string mid_input = input.substr(1, input.size() - 2);
sort(mid_input.begin(), mid_input.end());
string insert_word = left + mid_input + right;
if (word.count(insert_word) == 0)
word.insert(make_pair(insert_word, 1));
else
word[insert_word]++;
}
else
{
if (word.count(input) == 0)
word.insert(make_pair(input, 1));
else
word[input]++;
}
}
cin >> m;
cin.ignore();
for (int i = 0; i < m; i++)
{
string input;
getline(cin, input);
int result = 1;
//' '기준으로 단어 나눠서 check에 넣기
vector<string> check;
stringstream ss(input);
string temp;
while (getline(ss, temp, ' '))
{
//if (temp.size() == 0)
// continue;
check.push_back(temp);
}
for (int i = 0; i < check.size(); i++)
{
string this_word = check[i];
if (this_word.size() <= 3)
{
if (word.count(this_word) == 0)
result *= 0;
else
result *= word[this_word];
}
else
{
char left = this_word[0];
char right = this_word[this_word.size() - 1];
string mid_this_word = this_word.substr(1, this_word.size() - 2);
sort(mid_this_word.begin(), mid_this_word.end());
string check_word = left + mid_this_word + right;
if (word.count(check_word) == 0)
result *= 0;
else
result *= word[check_word];
}
}
cout << result << "\n";
}
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 1562번 : 계단 수 (0) | 2021.11.20 |
---|---|
[백준/BOJ] 백준 1102번 : 발전소 (0) | 2021.11.20 |
[백준/BOJ] 백준 5076번 : Web Pages (0) | 2021.11.20 |
[백준/BOJ] 백준 1079번 : 마피아 (0) | 2021.11.20 |
[백준/BOJ] 백준 15972번 : 물탱크 (0) | 2021.11.20 |