728x90
안녕하세요! 오늘은 백준 1157번 "단어 공부" 문제를 풀어보겠습니다.
문제 설명
- 알파벳 대소문자로 이루어진 단어가 주어진다.
- 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력하는 프로그램을 작성하라.
입력
- 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. (1 ≤ 단어의 길이 ≤ 1,000,000)
출력
- 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다.
풀이 방법
- 알파벳 개수 세기 (count 배열 사용)
- count 배열에서 max 값 찾기
- max 값이 중복되면 ? 출력
입력으로는 알파벳 대소문자로 이루어진 단어가 주어집니다. 이 때, 주어지는 단어의 길이는 1,000,000을 넘지 않습니다.
이 문제를 해결하는 가장 간단한 방법은 알파벳의 사용 빈도를 세는 것입니다. 대소문자를 구분하지 않으므로, 입력으로 주어진 단어를 모두 소문자로 변환한 후 알파벳의 사용 빈도를 세면 됩니다.
- 알파벳 개수 세기 (count 배열 사용)
- count 배열에서 max 값 찾기
- max 값이 중복되면 ? 출력
아래는 이 문제를 해결할 수 있는 C++ 코드입니다:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string word;
cin >> word;
transform(word.begin(), word.end(), word.begin(), ::tolower);
int freq[26] = {0};
for (char c : word) {
freq[c - 'a']++;
}
int maxFreq = 0;
char maxChar;
for (int i = 0; i < 26; i++) {
if (freq[i] > maxFreq) {
maxFreq = freq[i];
maxChar = 'A' + i;
} else if (freq[i] == maxFreq) {
maxChar = '?';
}
}
cout << maxChar << endl;
return 0;
}
이 코드는 먼저 입력으로 받은 단어를 소문자로 변환한 후, 알파벳의 사용 빈도를 세는 배열 freq
를 초기화합니다. 그리고 각 알파벳이 나타날 때마다 해당하는 배열 요소를 증가시킵니다.
마지막으로, 가장 많이 사용된 알파벳을 찾기 위해 배열 freq
를 순회하면서 최댓값을 갱신하고, 해당 알파벳을 저장합니다. 만약 최댓값과 같은 빈도를 가진 알파벳이 여러 개 있다면 '?'를 저장합니다.
이렇게 간단한 알고리즘을 이용하여 문제를 해결할 수 있습니다.
728x90
'백준 문제 풀이 > c++' 카테고리의 다른 글
백준 1330번 "두 수 비교하기" -- c++ (0) | 2024.02.29 |
---|---|
백준 1181번 "단어 정렬" -- c++ (1) | 2024.02.28 |
백준 1152번 "단어의 개수" -- c++ (0) | 2024.02.28 |
백준 1085번 "직사각형에서 탈출" -- c++ (0) | 2024.02.28 |
백준 1008번 문제 "A/B" -- C++ (2) | 2024.02.27 |