https://www.acmicpc.net/problem/1157
코드 #1
#include <stdio.h>
int main(void) {
int length = 0;
int array[1000000] = {0};
int count[1000000] = {0};
int k = 0;
do {
scanf("%d", &array[length]);
length++;
}while(array[length] != 0);
while(k < length) {
if(array[k] > 96) {
array[k] -= 32;
}
k++;
}
for(int i=0; i<length; i++){
for(int j=0; j<length; j++) {
if(array[i] == array[j]) {
count[i]++;
}
}
}
int max = 0;
int maxcount = 1;
for(int i=0; i<length; i++) {
if(count[i] > max) {
max = count[i];
maxcount = 1;
} else if(count[i] == max) {
maxcount++;
}
}
if(maxcount == 1) {
for(int i=0; i<length; i++) {
if(count[i] == max) {
printf("%c", array[i]);
}
}
} else {
printf("?");
}
}
코드 #2
#include <stdio.h>
int main(void) {
int length = 0;
char array[1000000];
int alphabet[26] = {0};
int k = 0;
int result = 0;
scanf("%s", array);
while(array[length] != '\0') {
length++;
}
while(k < length) {
if(array[k] > 96) {
array[k] -= 32;
}
k++;
}
for(int i=0; i<length; i++){
for(int j=i; j<length; j++) {
if(array[i] == array[j]) {
alphabet[array[i] - 65]++;
}
}
}
int max = 0;
int maxcount = 1;
for(int i=0; i<26; i++) {
if(alphabet[i] > max) {
max = alphabet[i];
maxcount = 1;
} else if(alphabet[i] == max) {
maxcount++;
}
}
if(maxcount > 1) {
printf("?");
} else {
for(int i=0; i<26; i++) {
if(alphabet[i] == max) {
printf("%c", i+65);
}
}
}
}
틀린 이유: 시간 초과, 코드를 쫌 줄일 필요가 있는거 같다.
코드 #3
#include <stdio.h>
#include <string.h>
int main(void) {
int length = 0;
char array[1000000];
int alphabet[26] = {0};
int max = 0;
char result = 0;
scanf("%s", array);
length = strlen(array);
for(int i=0; i<length; i++){
if(array[i] >= 'a') {
alphabet[array[i] - 'a']++;
} else {
alphabet[array[i] - 'A']++;
}
}
for(int i=0; i<26; i++) {
if(alphabet[i] > max) {
max = alphabet[i];
result = 'A' + i;
} else if(alphabet[i] == max) {
result = '?';
}
}
printf("%c", result);
}