알고리즘 문제/C++

[백준] 1157번 : 단어공부 - C++

lingk 2020. 6. 26. 15:34

문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

#include <map>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(void) {
	string word;
	cin >> word;
	map<char, int> save;
	save.insert(pair<char, int>('A', 0));
	save.insert(pair<char, int>('B', 0));
	save.insert(pair<char, int>('C', 0));
	save.insert(pair<char, int>('D', 0));
	save.insert(pair<char, int>('E', 0));
	save.insert(pair<char, int>('F', 0));
	save.insert(pair<char, int>('G', 0));
	save.insert(pair<char, int>('H', 0));
	save.insert(pair<char, int>('I', 0));
	save.insert(pair<char, int>('J', 0));
	save.insert(pair<char, int>('K', 0));
	save.insert(pair<char, int>('L', 0));
	save.insert(pair<char, int>('M', 0));
	save.insert(pair<char, int>('N', 0));
	save.insert(pair<char, int>('O', 0));
	save.insert(pair<char, int>('P', 0));
	save.insert(pair<char, int>('Q', 0));
	save.insert(pair<char, int>('R', 0));
	save.insert(pair<char, int>('S', 0));
	save.insert(pair<char, int>('T', 0));
	save.insert(pair<char, int>('U', 0));
	save.insert(pair<char, int>('V', 0));
	save.insert(pair<char, int>('W', 0));
	save.insert(pair<char, int>('X', 0));
	save.insert(pair<char, int>('Y', 0));
	save.insert(pair<char, int>('Z', 0));
	for (int i = 0; i < word.size(); i++) {
		save[toupper(word[i])]++;
	}
	int max = 0;
	char ans = ' ';
	map<char, int>::iterator iter;
	max = save.begin()->second;
	ans = save.begin()->first;
	for (iter = save.begin(); iter != save.end(); iter++) {
		if (max < iter->second) {
			max = iter->second;
			ans = iter->first;
		}
	}
	int count = 0;
	for (iter = save.begin(); iter != save.end(); iter++) {
		if (max == iter->second)
			count++;
	}
	if (count > 1)
		cout << "?";
	else
		cout << ans;
}

처음으로 map을 실습해서 적용해보았다.

대문자와 소문자를 구별하지 않기 때문에 toupper함수를 사용해서 입력받은 단어의 문자를 대문자로 바꿔 key 값으로 사용한다. 문자가 한번 사용될 때마다 해당 key의 value 값을 1씩 증가시킨다.

iterator를 사용하여 value가 가장 큰 key를 ans에 저장해준다.

가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 '?'를 출력해야하기 때문에 max의 값을 다시 value에서 찾았을 때 count를 증가시켜주어 count가 1보다 크면 '?'를 출력하고, 그 외의 경우에서는 ans를 출력해준다.

반응형