코딩/백준 문제 (브론즈)
[백준/1157/C언어] 단어 공부 _ 풀이
룻밤
2023. 8. 14. 17:36
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
풀이
#include <stdio.h>
int main() {
char s[1000000]; // 문자열은 1,000,000을 넘지않음
int arr[26] = {}; // 알파벳에 따른 반복 횟수 배열
int max = 0;
int max_i; // max의 인덱스
scanf("%s", s);
int i = 0;
while (s[i] != '\0') { // 문자열 끝까지 반복
if (s[i] >= 65 && s[i] <= 90) // 문자가 대문자일때
arr[s[i] - 65]++;
else if (s[i] >= 97 && s[i] <= 122) // 문자가 소문자일때
arr[s[i] - 97]++;
i++;
}
int dup = 0; // 중복 변수
for (int i = 0; i < 26; i++) {
if (max < arr[i]){ // 가장 반복횟수가 큰 것을 max로 잡음
max = arr[i];
max_i = i; // 그때의 max 인덱스 변수
}
}
for (int i = 0; i < 26; i++) {
if (max == arr[i]) // 같은 max값이 여러개일때
dup++; // 중복 변수 +1
}
if (dup > 1) // 중복 변수가 1이상일때
printf("?\n"); // ? 출력
else
printf("%c", max_i + 65); // 아닐때 알파벳 출력
return 0;
}