728x90
문제를 간단히 설명하면, 알파벳 대소문자로 이루어진 단어가 주어졌을 때, 가장 많이 사용된 알파벳을 대문자로 출력하는 문제입니다.
문제를 풀면 아래 코드가 나옵니다.
1.
#include <stdio.h>
#include <ctype.h>
int main() {
char word[1000001];
int count[26] = {0,};
int max_count = 0, max_index = 0;
int i;
scanf("%s", word);
for (i = 0; word[i] != 'NULL'; i++) {
int index = toupper(word[i]) - 'A';
count[index]++;
}
for (i = 0; i < 26; i++) {
if (count[i] > max_count) {
max_count = count[i];
max_index = i;
}
}
for (i = 0; i < 26; i++) {
if (i == max_index) {
continue;
}
if (count[i] == max_count) {
printf("? \n");
return 0;
}
}
printf("%c \n", max_index + 'A');
return 0;
}
2.
#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);
for(i=0; i < len; i++){
// 입력된 문자의 길이만큼 실행시킨다 ( 아까 변수에 지정한 strlen(arr) )
if( arr[i] >= 'A' && arr[i] <= 'Z'){
number = arr[i] - 'A';
}
// arr[i] 가 대문자 A~Z 사이 일 경우에 아스키코드 값상 대문자 A를 빼주면 숫자 0~26 사이로 값이 나오기 때문에 그 값을 number라는 변수에 넣어주었다.
else if ( arr[i] >= 'a' && arr[i] <= 'z'){
number = arr[i] - 'a';
}
// 대문자와 같이 입력값이 소문자 a~z일 경우 소문자 a를 빼주면 숫자 0~26 사이의 값을 number 라는 변수에 담아준다 .
cnt[number]++;
// number에 저장된 정수값은 cnt[number]의 인덱스로 1만큼 더해준다.
// 이렇게 해서 어떤 알파벳이 쓰였는지 하나하나 체크해준다.
}
max = cnt[0];
// max 라는 변수안에 가장 첫번째 인덱스 값을 넣어주어서 가장 많이 쓰인 알파벳을 찾는다.
for(i = 1; i < 26; i++) {
if(max < cnt[i]) {
max = cnt[i]; select = i; } }
// select 변
for(i = 0; i < 26; i++) {
if(max == cnt[i]) result++; }
// 만약 max 와 cnt[i] 값이 똑같다면 result 에 1씩 더해서 가장 많이 쓰인 알파벳이 2개이상인지 찾아본다.
if(result > 1) printf("? \n"); // 만약 2개 이상 많이 사용된 알파벳이 있다면 ? 출력
else printf("%c", select+'A'); // 아니라면 아까 지정했던 select는 정수 값으로 지정되어 있어서 대문자 A 만큼 더해서 출력해준다.
return 0;
}
1번 풀이
위 코드에서 word는 입력받은 단어를 나타내는 문자열입니다. count는 각 알파벳이 나온 횟수를 저장하는 배열입니다. 우선, 입력받은 단어에서 각 알파벳이 나온 횟수를 count에 저장합니다. 이때, 대소문자를 구분하지 않기 위해 toupper 함수를 사용하여 모두 대문자로 바꿔줍니다.
그 다음, count 배열에서 가장 많이 나온 알파벳을 찾아냅니다. 만약, 가장 많이 나온 알파벳이 중복되는 경우 "?"를 출력하고 종료합니다. 그렇지 않은 경우, 가장 많이 나온 알파벳을 대문자로 출력합니다.
이렇게 코드를 작성하면 주어진 단어에서 가장 많이 사용된 알파벳을 출력할 수 있습니다.
2번 풀이
strlen은 문자 길이를 구합니다. for 문으로 가장 많이 입력한 알파벳을 찾고 구해서 출력할수 있습니다.
728x90
'백준 문제 풀이 > c언어' 카테고리의 다른 글
백준 1181 C언어 문제 풀이 - 단어 정렬 (1) | 2024.01.28 |
---|---|
백준 1152 C언어 문제 풀이 - 단어의 개수 (0) | 2024.01.28 |
백준 1152 C언어 문제 풀이 - 단어의 개수 (0) | 2024.01.28 |
백준 1018 C언어 문제 풀이 - 체스판 다시 칠하기 (0) | 2024.01.28 |
백준 1008 C언어 문제 풀이 - A/B (0) | 2024.01.28 |