풀이1: c-string을 한번에 받아 처리하기 (복잡)
#include <stdio.h>
#include <ctype.h>
#define LETTERS 26
int main(void)
{
char word[1000000] = { '\0' };
int alpha[LETTERS] = { 0 };
int i, most, second;
gets(word);
for (i=0; word[i] != '\0'; i++)
word[i] = toupper(word[i]);
for(i=0; word[i]!='\0'; i++)
alpha[word[i] -'A']++;
second = -1;
for (i = most = 0; i < LETTERS; i++)
{
if (alpha[i] > alpha[most])
most = i;
else if (i && alpha[i] == alpha[most])
second = i;
}
if (second > -1 && alpha[most] == alpha[second])
putchar('?');
else
putchar((char) ('A' + most));
return 0;
}
풀이2: getchar를 통해 그때 그때 받은 alphabet 개수 세기
(최다빈출 알파벳을 도출하는 과정은 동일함: 인덱스를 저장-값을 저장할 수도 있지만 변수 개수 최소화하기 위해)
#include <stdio.h>
#include <ctype.h>
#define LETTERS 26
int main(void)
{
int alpha[LETTERS] = { 0 };
int i, m1, m2;
char c;
while ((c = getchar()) != '\n')
alpha[toupper(c) - 'A']++;
m2 = -1;
for (i = m1 = 0; i < LETTERS; i++)
{
if (alpha[i] > alpha[m1])
m1 = i;
else if (i && alpha[i] == alpha[m1])
m2 = i;
}
if (m2 > -1 && alpha[m1] == alpha[m2])
putchar('?');
else
putchar((char) ('A' + m1));
return 0;
}
'문제풀이' 카테고리의 다른 글
[C언어] 백준 2908 상수 (0) | 2021.12.22 |
---|---|
[C언어] 백준 1152 단어의 개수 (0) | 2021.12.22 |
[C언어] 백준 2675 문자열반복 (0) | 2021.12.21 |
[C언어] 백준 10809 알파벳찾기 (0) | 2021.12.21 |
[C언어] 백준 11720 (0) | 2021.12.21 |