[BOJ][C++] 백준 1371번 가장 많은 글자

Updated:

1371번 가장 많은 글자

1. 문제 정보

백준 온라인 저지 [1371번 가장 많은 글자] 문제의 링크입니다.

문제

영어에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31% 글자는 e이다.
어떤 글이 주어졌을 때, 가장 많이 나온 글자를 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 가장 많이 나온 문자를 출력한다. 여러 개일 경우에는 알파벳 순으로 앞서는 것부터 모두 공백없이 출력한다.


예제 입력1

english is a west germanic language originating in england and is the first language for most people in the united kingdom the united states canada australia new zealand ireland and the anglophone caribbean it is used extensively as a second language and as an official language throughout the world especially in common wealth countries and in many international organizations

예제 출력1

a

예제 입력2

baekjoon online judge

예제 출력2

eno

시간 / 메모리 제한

2초 / 128MB


2. 생각

  1. 생각해야할 부분이 몇 가지 있는 문제였습니다. 먼저 문자열 처리에서 EOF(End Of file)를 입력 받는 문제입니다. c++에서는 while문의 조건식에 (cin » c)를 사용하는 것만으로도 EOF를 검출할 수 있습니다. c에서는 scanf의 리턴값을 이용할 수 있습니다.
    • 콘솔창에서는 Ctrl + Z(^Z)를 입력해줘야 EOF 입력이 됩니다. 파일 시스템에서는 ^Z를 입력해줄 필요가 없습니다.
  2. 그리고 입력받은 문자 c에서 아스키 코드 값 ‘a’를 빼주며 알파벳 배열을 통해 카운트합니다. 반복문은 EOF를 만날 때까지 반복합니다.

  3. 다음으로 가장 많이 카운트된 배열 인덱스를 찾아내는 것입니다. max index 1개만 구하면 더 쉬웠겠지만, 중복된 index를 모두 저장해야하므로 vector의 push_back() 함수를 사용했습니다.

  4. 마지막으로 가장 많이 카운트된 인덱스(들)를 담은 배열 max_index에 담겨있는 index만큼 다시 문자로 바꾸어 출력합니다.

3. 소스코드 (C++)


터미널의 입출력 화면 예제1

1371_1

터미널의 입출력 화면 예제2

1371_2 1371_3