Post List

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

백준 1371 가장 많은 글자



이 문제에서 가장 중요한 포인트는, end of file 입니다.
홍익대학교 알고리즘 학회원인 degurii 님 덕분에 알게 되었습니다.
while(~scanf("%d", &variable)){ } 에서, 만약 scanf로 eof를 받게 되었다면, scanf 함수는 -1을 반환하고, 이를 비트(NOT) 연산 하게 되면 0으로 바뀌어 while문을 탈출하게 되는 구조 입니다.


소스 코드 :

#include 
#include 
using namespace std;

int main() {
    // 알파벳의 빈도수를 저장할 배열선언
 int arr[26] = { 0, };
 char tmp;
 int maxcnt = 0;
    // eof일 때 까지 while loop
 while (~scanf("%c", &tmp)) {
  if (isalpha(tmp)) {
   (arr[tmp - 'a'])++;
            // 가장 많이 나오는 문자가 지금까지 최대 몇번 나왔는지 저장.
   if (maxcnt < arr[tmp - 'a']) {
    maxcnt = arr[tmp - 'a'];
   }
  }
 }
 for (int i = 0; i < 26; i++) {
        // 가장 많이 나왔던 개수를 가지고 있는 문자(들)을 출력.
  if (maxcnt <= arr[i]) {
   cout << (char)(i + 'a');
  }
 }
}

댓글