[백준 1157번] 단어 공부
문제
단어를 입력하면 알파벳의 개수를 센다 => 가장 많은 빈도를 가진 알파벳을 대문자로 출력하고, 최대 개수가 같다면 ?를 출력
코드
#include <iostream>
#include <string>
int main()
{
std::string str;
std::cin >> str;
int num[26] = {
0,
};
for (int i = 0; i < str.length(); i++)
{
int idx = std::tolower(str[i]) - 'a';
num[idx]++;
}
int maxIdx = 0;
int isSame = false;
for (int i = 1; i < 26; i++)
{
if (num[maxIdx] == num[i])
{
isSame = true;
}
if (num[maxIdx] < num[i])
{
maxIdx = i;
isSame = false;
}
}
if (isSame)
{
std::cout << "?" << std::endl;
}
else
{
char ans = maxIdx + 'a' - 32;
std::cout << ans << std::endl;
}
}
풀이
ASCII 사용! -> 단어의 길이만큼 반복문을 돌리면서 해당 인덱스에 +1 씩한다. -> 알파벳 개수만큼 반복문을 돌리면서 최대 개수가 같다면 isSame을 true로 바꾸고, 최대 개수가 바뀔때마다 최대 개수의 인덱스 역시 바꾸여주면서 동시에 isSame을 false로 바꾸어 준다.
배운 점
- str 입력받기 => std::string
- 소문자로 바꾸기 -> std::tolower -> 리턴값은 해당 ascii 코드값
댓글남기기