1. 문제
int main()
{
char c;
int max = 0;
int max_num = 0;
int max_ = 0;
int alphabet_cnt[26] = { 0, };
while ((c = getchar()) != '\n')
{
if (c >= 'a' && c <= 'z')
c = c - ('a' - 'A');
alphabet_cnt[(c - 'A')]++;
}
for (int i = 0; i < 26; i++)
{
if (max < alphabet_cnt[i])
{
max = alphabet_cnt[i];
max_num = i;
}
}
for (int i = 0; i < 26; i++)
{
if (alphabet_cnt[max_num] == alphabet_cnt[i])
max_++;
}
if (max_ == 1)
printf("%c", max_num + 'A');
else
printf("?");
return 0;
}
배열 중 가장 많은 큰 값을 골라내는데 중복이 있으면 '?'를 출력해야 한다. for문 2번, if문 1번 썼는데 너무 복잡하다.
2. 문제 해결
int main()
{
char c;
int max = 0;
char ans;
int alphabet_cnt[26] = { 0, };
while ((c = getchar()) != '\n')
{
if (c >= 'a' && c <= 'z')
c = c - ('a' - 'A');
alphabet_cnt[(c - 'A')]++;
}
for (int i = 0; i < 26; i++)
{
if (max == alphabet_cnt[i])
ans = '?';
else if (max < alphabet_cnt[i])
{
max = alphabet_cnt[i];
ans = i + 'A';
}
}
printf("%c", ans);
return 0;
}
max 값은 무조건 있을거니까 중복이 있다면 ans = '?'
max가 갱신되면 ans에 해당 값을 넣는다.
* 왜 이 생각을 못했을까? 머리가 잘 안돌아가는 듯ㅠ
'BACKJOON, 백준' 카테고리의 다른 글
백준 2566번 최대값 초기 설정 (0) | 2023.12.04 |
---|---|
백준 10951번 중복 숫자 (0) | 2023.11.18 |
백준 10951번 EOF (0) | 2023.11.15 |
백준 2480번 주사위 세개 (0) | 2023.11.15 |
백준 2525번 오븐 시계 (0) | 2023.11.14 |