컴퓨터기본/문제풀이

[백준] 1157: 단어 공부

차가운오미자 2021. 6. 27. 11:15

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

 

alphabets[]라는 배열을 만들어서, 여기 a는 0, b는 1에 각 문자가 반복되는 횟수를 저장했다. 

관건은 답을 프린트하는건데, 

alpahbet배열을 traverse 하며, biggest라는 int 값을 통해 가장 큰 횟수를 저장하고, 그 횟수에 해당하는 알파벳과 반복 횟수를 pair로 만들어서 벡터에 넣었다가, 만약 그거보다 큰 횟수의 알파벳이 있으면 answer 벡터를 비워버리고 새로운 알파벳 pair를 저장했다.

이렇게 배열을 다 traverse한 후에, 만약 answer벡터에 값이 2이상 있으면 가장 큰 반복 횟수를 가진 알파벳이 두 개 이상이라는 거니까 ? 을 프린트하고, 아니면 그냥 알파벳 index + 'A' 를 프린트해줬다. 

 

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(void){
	
	string s;
	cin >> s;
	
	int alphabets[26] = { 0,};
	
	for(int i = 0; i<s.length(); i++){
		
		if(s[i]>='a'){
			alphabets[s[i] - 'a']++;
		}else{
			alphabets[s[i] - 'A']++;
		}
	}
	
	int biggest = 0; 
	vector<pair<int, int> > answer;
	for(int i = 0; i<26; i++){
		if(alphabets[i]>biggest){
			answer.clear();
			biggest = alphabets[i];
			answer.push_back(make_pair(i, alphabets[i]));
		}else if(alphabets[i] == biggest){
			answer.push_back(make_pair(i, alphabets[i]));
		}
	}
	
	if(answer.size()>1){
		cout << "?" << endl;
	}else{
		char temp = 'A' + answer.front().first;
		cout << temp << endl;
	}
}

'컴퓨터기본 > 문제풀이' 카테고리의 다른 글

[백준] 9012번: 괄호  (0) 2021.08.07
[백준] 1152번: 단어의 개수  (0) 2021.06.30
[백준] 2675번: 문자열 반복  (0) 2021.06.27
[백준] 2164번: 카드2  (0) 2021.06.24
[백준] 18258번: 큐2  (0) 2021.06.24