문제출처 : https://www.acmicpc.net/problem/1157
그리디알고리즘은 아니지만 풀다가 좀 복잡한것 같아서 올리게 되었다.
분류는 구현, 문자열.입력은 대문자 소문자로 입력받지만 판단할때는 대 소문자를 구분하지 않는다고 나와있다.
그럼그냥 소문자를 대문자로 만들어버리면된다.
그다음 문자마다 등장횟수를 다른 배열에 기록해서 만약 max값이 2개이상이 나오면 ?를찍고,
max값이 하나가 정해지면 그문자를 출력하면 된다.code
#include <stdio.h> #include <string.h> int main() { char s[1000000] = { 0 }; int len = 0, i, j; int arr[26] = { 0 }, max = 0, flag=0, index = 0; scanf("%s", s); len = strlen(s); for (i = 0; i < len; i++) if (s[i] >= 'a' && s[i] <= 'z') s[i] -= 32; for (i = 0; i < len; i++) arr[s[i] - 65]++; for (i = 0; i < 26; i++) if (max < arr[i]) { max = arr[i]; index = i; } for (i = 0; i < 26; i++) if (index != i && arr[index] == arr[i]) flag = 1; if (flag == 1) printf("?"); else printf("%c", index + 65); return 0; }