본문 바로가기

백준

백준1371 - 가장 많은 글자

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

 

1371번: 가장 많은 글자

첫째 줄부터 글의 문장이 주어진다. 글은 최대 5000글자로 구성되어 있고, 공백, 알파벳 소문자, 엔터로만 이루어져 있다. 그리고 적어도 하나의 알파벳이 있다.

www.acmicpc.net

입력받은 문장의 끝을 EOF로 판별하는 문제다. 윈도우에서는 ctrl + Z로 입력을 받는다.  알파벳의 출현 횟수가 가장 큰 것을 알파벳 순으로 출력한다. EOF를 처리하는 것이 생각보다 어려워서 애먹은 문제다.

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

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int mat[26] = { 0, }; //알파벳의 수를 세어 저장하는 변수
	int big = -1; //최댓값
	string s; //입력할 문자열

	while (!cin.eof()) { //ctrl + z를 입력할 때 까지 문장을 입력
		getline(cin, s); //문장을 공백 포함 입력으로 '\n'를 만나면 종료
		for (int i = 0; i < s.size(); i++) { //문장의 끝까지 알파벳을 찾는다.
			if ('a' <= s[i] && s[i] <= 'z') { //알파벳을 만나면
				mat[s[i] - 'a']++; //알파벳의 갯수를 증가
			}
		}
	}
	
	//알파벳의 갯수 중 가장 큰 것을 찾는다.
	for (int i = 0; i < 26; i++) { 
		if (big < mat[i]) { //big보다 현재 위치에 알파벳의 출현 수가 더 크면
			big = mat[i]; //big 갱신
		}
	}

	//가장 큰 알파벳 출현 수를 알파벳 순으로 출력
	for (int i = 0; i < 26; i++) {
		if (big == mat[i]) { //i번째 알파벳의 수와 가장 큰 알파벳 수가 같으면
			cout << char('a' + i); //i번째 알파벳 출력
		}
	}
}

'백준' 카테고리의 다른 글

백준5639 - 이진 검색 트리  (0) 2019.07.18
백준2869 - 달팽이는 올라가고 싶다.  (0) 2019.07.17
백준1431 - 시리얼 번호  (0) 2019.07.15
백준1296 - 데이트  (0) 2019.07.13
백준1956 - 운동  (0) 2019.07.08