[문제]
영희와 철수는 단어게임을 하고 있다. 영희가 첫글자를 말하면, 철수는 그 글자로 시작하는 단어를 얘기해야 한다. 단, 단어는 미리 주어진 단어목록에서 선택해야 하며, 동일한 첫글자를 가진 단어가 여러개 있다면, 각 단어는 최소 횟수로 말한 것이여야 한다. 횟수가 똑같다면 알파벳 순으로 결정한다.
[코드]
// 실제 시험에서는 Solution 클래스의 solution 함수를 사용합니다. 이를 감안하여 풀이해주세요.
#include <iostream>
#include <algorithm>
using namespace std;
void solution(int k, int n, vector<string> word, vector<char> first_word){
//각 단어는 최소 횟수로. 같은 횟수면 알파벳 순으로.
sort(word.begin(), word.end());
vector<int> count(k+1, 0);
for(int i=0; i<n; i++){
vector<int> s;
for(int j=0; j<k; j++){
if(first_word[i] == word[j][0]){
s.push_back(j);
}
}
//횟수 비교
int min_cnt = 100000;
int index;
for(int j=0; j<s.size(); j++){
if(count[s[j]] < min_cnt){
min_cnt = count[s[j]];
index = s[j];
}
}
count[index]++;
cout << word[index] << "\n";
}
}
int main() {
int k, n;
vector<string> word;
vector<char> first_word;
cin >> k >> n; //미리 주어지는 단어의 개수, 게임에 사용할 단어 첫글자 개수
for(int i=0; i<k; i++){
string s;
cin >> s;
word.push_back(s);
}
for(int i=0; i<n; i++){
char c;
cin >> c;
first_word.push_back(c);
}
solution(k, n, word, first_word);
return 0;
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[기출 상] 주울 수 있는 최대 돈 1 - 동적계획법 (0) | 2021.09.08 |
---|---|
[기출 상] N개의 작업공정 - 위상정렬 (0) | 2021.09.08 |
[기출 상] 백준 14891 톱니바퀴 (0) | 2021.09.08 |
[기출 상] 주울 수 있는 최대의 돈2(정수삼각형) (0) | 2021.09.07 |
[기출 상] 백준 19538 루머 (0) | 2021.09.06 |