https://www.acmicpc.net/problem/1157
입력한 단어에서 가장 많은 수를 가진 알파벳의 대문자를 출력하는 문제.
아스키 코드를 이용해서 풀었다.
#include <stdio.h>
#include <string.h>
int main(void){
char arr[1000000];
int alpah[26]={0, }, max=0, tmax=0, i=0, num=0;
int len=0;
scanf("%[^\n]",arr);
len = strlen(arr);
for(i=0; i<len; i++){
if((int)arr[i]>=97)
alpah[(int)arr[i]-32-65]++;
if((int)arr[i]<97)
alpah[(int)arr[i]-65]++;
}
for(i=0; i<26; i++){
if(max<alpah[i]){ //가장 높은 알파벳의 갯수<해당알파벳의 갯수 ?
tmax=i; //가장 높은 알파벳의 아스키코드값 구하기
max=alpah[i]; //가장 높은 알파벳의 갯수
}
}
for(i=0; i<26; i++)
if(max==alpah[i]) num++;
if(num>=2) printf("?");
else printf("%c",(char)(tmax+65));
return 0;
}
아스키코드표를 보니까 대문자 A~Z 65~90이고 소문자 a~z는 97~122까지 값을 가지고 있었다.
소문자값을 대문자로 변환하려면 97~122번 값을 받았을 때 32를 빼면 된다는 사실 하나를 발견하고 코딩을 시작했다.
%c 문자형으로 값을 입력 받고, %d 정수형으로 값을 출력하면 입력받은 문자의 아스키코드 값을 간단하게 10진수로 출력할 수 있었다.
마지막에 mississipi와 같이 한 단어에 알파벳 수가 같은 숫자로 떨어질 때 ?를 출력하는 부분에서 시간이 좀 걸렸는데
for문을 한번 더 돌리면서 최고값과 같은 수를 가진 알파벳이 2개이상 있을 때 ?를 출력하도록 해서 문제를 해결했다.