* Problem Statement
문제는 길지만, 간단하게 요약하면 주어진 스트링에서 제일 많이 나오는 문자를 찾아서 출력하는 문제입니다. 만약 여러 개 존재한다면 '?'를 출력합니다.
Analysis
인터넷 예선 문제에 String Input과 관련된 문제가 있었던 이유는 아마도 이 문제를 위함이 아니었을까 싶습니다. scanf를 사용한다면 공백이 있는 스트링을 입력받기 위해서는 귀찮은 처리를 해야 하기 때문이지요. 이러한 스타일의 입력이 주어지는 경우에는 fgets나 gets를 사용해서 입력받는 것을 권장합니다. (iostream의 getline을 써도 되지요.)
사실 입력을 정상적으로 받았다면 인터넷예성 A번의 명성[?]에 걸맞게 누구라도 풀 수 있는 문제였습니다.
source code
#include <cstdio>#include <string>#include <algorithm>#include <sstream>#include <vector>usingnamespacestd;inlinestringGetLine(){charstr[1005];fgets(str,1000,stdin);returnstr;}intmain(){stringstrT=GetLine();intT;istringstreamsin(strT);sin>>T;// 첫 줄은 Number of Datasetwhile(T--){stringstrInput=GetLine();vector<int>nAlphabet(26,0);for(inti=0;i<strInput.size();++i){charch=strInput[i];if(ch!=' ')nAlphabet[ch-'a']++;}// 제일 많은 알파벳이 몇 개인지 리스트에서 검색intmaxAlphabet=*(max_element(nAlphabet.begin(),nAlphabet.end()));charcRet='?';// maxAlphabet의 개수를 가지는 알파벳이 1개 있다면if(count(nAlphabet.begin(),nAlphabet.end(),maxAlphabet)==1){// 그 알파벳의 index를 가져와서 알파벳으로 변환합니다.cRet='a'+(find(nAlphabet.begin(),nAlphabet.end(),maxAlphabet)-nAlphabet.begin());}printf("%c\n",cRet);}}
astein
* Problem Statement
문제는 길지만, 간단하게 요약하면 주어진 스트링에서 제일 많이 나오는 문자를 찾아서 출력하는 문제입니다. 만약 여러 개 존재한다면 '?'를 출력합니다.
16년 전