단어 공부

표준성·2023년 3월 26일
0

baekjoon

목록 보기
2/5

백준 1157

문제 링크


문제


문제 이해

  • 알파벳 대소문자를 구분하지 않는다.

  • 가장 많이 사용된 알파벳이 여러 개일 경우 "?"를 출력한다.

  • 단어의 길이는 1,000,000을 넘지 않는다.
(1 ≤ WORD ≤ 1,000,000)

💡문제 해결 과정

  1. 입력받은 단어를 저장할 배열 'arr'과 알파벳 별 카운트를 저장할 배열 'cnt'를 선언한다.
  2. 'arr'에 단어를 입력받고, strlen함수로 단어의 길이를 계산한다.
int len;
char arr[1000000];
int cnt[26] = {0};
int select = 0;

scanf("%s", arr);
len = strlen(arr);
  1. 알파벳 별 카운트를 계산한다. 이때 대소문자를 구분하지 않으므로 a부터 z까지 / A부터 Z까지 반복문을 두 번 실행해야 한다.
  2. 알파벳 별 count가 cnt에 들어가게 된다.
for(int i = 'a'; i <= 'z'; i++)
    {
        for(int j = 0; j < len; j++)
        {
           if(i == arr[j])
               cnt[i-'a']++;
        }
    }
for(int i = 'A'; i <= 'Z'; i++)
    {
        for(int j = 0; j < len; j++)
        {
           if(i == arr[j])
               cnt[i-'A']++;
        }
    }
  1. cnt배열에서 가장 큰 값을 찾아 출력해야 한다. C는 max함수가 없으므로 인덱스를 증가시키며 max값과 해당 인덱스(select)를 찾는 방식을 택했다.
int max = cnt[0];
for (int i = 1; i < 26; i++) {
  if (max < cnt[i]) {
    max = cnt[i];
    select = i;
  }
}
  1. cnt배열에서 가장 큰 값과 같은 값을 가진 원소의 개수를 'result'에 넣는다.
    result가 1보다 크면 "?"를 출력하고, 그렇지 않으면 'select'에 해당하는 알파벳을 출력한다.
for (int i = 0; i < 26; i++) {
  if (max == cnt[i])
    result++;
}
if (result > 1)
  printf("?\n");
else
  printf("%c", select + 'A');

코드

#include <stdio.h>
#include <string.h>

int main(void) {
  int max, result = 0, len;
  char arr[1000000];
  int cnt[26] = {0};
  int select = 0;

  scanf("%s", arr);
  len = strlen(arr);

  for (int i = 'a'; i <= 'z'; i++) {
    for (int j = 0; j < len; j++) {
      if (i == arr[j])
        cnt[i - 'a']++;
    }
  }
  for (int i = 'A'; i <= 'Z'; i++) {
    for (int j = 0; j < len; j++) {
      if (i == arr[j])
        cnt[i - 'A']++;
    }
  }

  max = cnt[0];
  for (int i = 1; i < 26; i++) {
    if (max < cnt[i]) {
      max = cnt[i];
      select = i;
    }
  }

  for (int i = 0; i < 26; i++) {
    if (max == cnt[i])
      result++;
  }

  if (result > 1)
    printf("?\n");
  else
    printf("%c", select + 'A');
  return 0;
}

✅성능 및 결과

profile
HYU_INFOSYS 23

0개의 댓글