본문 바로가기

알고리즘 공부 및 문제 풀이/백준(BOJ)

[기출 상] 단어 게임

[문제]

영희와 철수는 단어게임을 하고 있다. 영희가 첫글자를 말하면, 철수는 그 글자로 시작하는 단어를 얘기해야 한다. 단, 단어는 미리 주어진 단어목록에서 선택해야 하며, 동일한 첫글자를 가진 단어가 여러개 있다면, 각 단어는 최소 횟수로 말한 것이여야 한다. 횟수가 똑같다면 알파벳 순으로 결정한다.

 

[코드]

// 실제 시험에서는 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;
}