바야바네 움집

[1157] 문자열 : 단어 공부 본문

🧶 알고리즘/🎲백준BOJ

[1157] 문자열 : 단어 공부

친절한 바야바 2021. 11. 23. 23:15

📌대 · 소문자 변환

1. 아스키 코드를 사용해 직접 변환

- 소문자를 대문자로 바꾸고 싶은 경우 : 바꾸고자 하는 char - 'a' + 'A'

- 대문자를 소문자로 바꾸고 싶은 경우 : 바꾸고자 하는 char - 'A' + 'a'

 

계산 원리는

1. 해당 알파벳의 위치를 찾아내서 (char - 'a' or 'A')

2. 원하는 쪽에서 찾는 방식이다. ((1) + 'A' or 'a')

 

2. cctype 라이브러리의 tolower, toupper 함수 사용

- string 전체를 한번에 바꾸지 못하기 때문에 인덱스를 사용해 일일이 변환해주어야 한다는 번거로움이 있음.

 

 

 

📌풀이

전부 대문자로 바꾼 다음에 개수를 센다. 효율 개떨어지는 듯. 깔깔

 

📌코드

#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

string myToUpper(string _str)
{
    string temp = "";
    for(int i=0; i<_str.length(); i++)
    {
        int c = _str[i];
        if(c >= 'a' && c <= 'z')
            temp += (char)(c - 'a' + 'A');
        else
            temp += (char)c;
    }
    return temp;
}

int main()
{
    int max;
    char maxChar;
    string str;
    unordered_map<char, int> alphabet;

    getline(cin, str);
    str = myToUpper(str);

    for(int i=0; i<str.length(); i++)
    {
        alphabet[str[i]]++;
    }

    max = -1;
    for(auto a : alphabet)
    {
        if(max < alphabet[a.first])
        {
            max = alphabet[a.first];
            maxChar = a.first;
        }
    }

    for(auto a : alphabet)
    {
        if(max == alphabet[a.first] && maxChar != a.first)
        {   
            printf("?");
            return 0;
        }
    }
    
    printf("%c", maxChar);
    return 0;
}

 

 

'🧶 알고리즘 > 🎲백준BOJ' 카테고리의 다른 글

[9095][C++] 1, 2, 3 더하기  (0) 2022.04.15
[1463][C++] 1로 만들기  (0) 2022.04.15
[10809] 문자열 : 알파벳 찾기  (0) 2021.11.23
[11654] 문자열 : 아스키 코드  (0) 2021.11.23
[6588번] 골드바흐의 추측  (0) 2021.08.31
Comments