백준(BaekJoon)

[BaekJoon/C] No.1157 : 단어 공부

ekdnjs510 2024. 8. 6. 07:45
728x90

https://www.acmicpc.net/problem/1157

 

No.1157 문제

 

문제해석

 입력받은 문자의 길이를 구하고 그 길이만큼 순회하며 알파벳을 정수로 인덱스화 시켜 각각 사용한만큼 카운트 해줍니다. 카운트 한 인덱스의 최댓값을 구하고 정수형 인덱스를 다시 알파벳으로 변환하여 구해줍니다.

 

소스코드 & 문제풀이

 

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

int main(void)
 { 
  int i, j, max, result=0, len; 
  char arr[1000000]; 
  int cnt[26] = {0, }; 
  int select = 0;
  int number; 
  
  scanf("%s", arr);
  
  len = strlen(arr); //입력된 문자열의 길이를 계산하여 len 변수에 저장합니다
  
  // 입력된 문자의 길이만큼 실행시킵니다
  for(i=0; i < len; i++){
  
  
  // 문자와 소문자를 동일하게 처리하기 위해 'A' 또는 'a'를 빼서 0부터 25까지의 인덱스로 변환하고,
  // 해당 인덱스의 cnt 값을 증가시킵니다
    if( arr[i] >= 'A' && arr[i] <= 'Z'){ 
      number = arr[i] - 'A';
    } 
    else if ( arr[i] >= 'a' && arr[i] <= 'z'){
      number = arr[i] - 'a';
    }
    cnt[number]++;
   
   }
   
// cnt 배열을 순회하면서 가장 큰 값을 max에 저장하고, 그 인덱스를 select에 저장합니다
  max = cnt[0];   
  for(i = 1; i < 26; i++) { 
    if(max < cnt[i]) { 
      max = cnt[i]; select = i; } }

//  cnt 배열을 다시 순회하면서 max와 같은 값을 가지는 요소의 수를 result에 저장합니다
  for(i = 0; i < 26; i++) { 
    if(max == cnt[i]) result++; } 
   
    
// 만약 2개 이상 많이 사용된 알파벳이 있다면 ? 출력합니다    
  if(result > 1) printf("? \n");  
// 아니라면 아까 지정했던 select를 'A'만큼 더해 대문자 알파벳으로 변환하여 출력합니다
  else printf("%c", select+'A');

  
  return 0;
}

 

 

제 입출력 결과

 

 

728x90