https://www.acmicpc.net/problem/1371
입력받은 문장의 끝을 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 |