본문 바로가기

문제풀이

[C언어] 백준 1157 단어공부

 

풀이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