728x90
https://www.acmicpc.net/problem/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
'백준(BaekJoon)' 카테고리의 다른 글
[BaekJoon/C] No.10814 : 나이순 정렬 (0) | 2024.08.14 |
---|---|
[BaekJoon/C] No.2941 : 크로아티아 알파벳 (0) | 2024.08.06 |
[BaekJoon/C] No.24723 : 녹색거탑 (0) | 2024.07.30 |
[BaekJoon/C] No.15439 : 베라의 패션 (0) | 2024.07.30 |
[BaekJoon/C] No.2750 : 수 정렬하기 (0) | 2024.07.21 |