Algorithm/프로그래머스

[프로그래머스] JadenCase 문자열 만들기 with C++

nowkoes 2023. 5. 27. 00:00

문제 설명


제한 사항 및 입출력 예제


개념

 첫 문자를 대문자로 처리하고 나머지 알파벳을 소문자로 처리하는 문자열 처리 문제다. 입력 문자열에서 각 단어의 첫 문자를 대문자로, 그 외의 알파벳을 소문자로 바꾸는 작업이 필요하다. 여기서 '단어'는 공백 문자로 구분되므로, 문자열을 순회하며 공백 문자를 만났을 때 그 다음 문자를 대문자로 바꿔주면 된다. 


풀이

#include <string>
#include <vector>
using namespace std;

string solution(string s)
{
    string answer;
    bool isTrue = false;

    answer += toupper(s[0]);
    s = s.substr(1);

 공백 문자를 만났는지 여부를 체크할 플래그 변수 isTrue를 false로 초기화해준다. 그리고 첫 문자는 항상 대문자여야 하므로, 변환하고 입력 문자열에서 제거해준다.

 

    for (const auto& ch : s)
    {
        if (ch == ' ')
        {
            isTrue = true;
            answer += ch;
            continue;
        }

        if (isTrue)
        {
            answer += toupper(ch);
            isTrue = false;
        }

        else
            answer += tolower(ch);
    }

    return answer;
}

 공백을 만났을 때 플래그를 true로 체크해주고, 다음 반복으로 넘긴다. 새로운 단어의 시작이라면, 해당 문자를 대문자로 변환하고 플래그를 해제해준다. 그렇지 않으면 해당 문자를 소문자로 변환해준다.

 

총합본

더보기
#include <string>
#include <vector>
using namespace std;

string solution(string s)
{
    string answer;
    bool isTrue = false;

    answer += toupper(s[0]);
    s = s.substr(1);

    for (const auto& ch : s)
    {
        if (ch == ' ')
        {
            isTrue = true;
            answer += ch;
            continue;
        }

        if (isTrue)
        {
            answer += toupper(ch);
            isTrue = false;
        }

        else
            answer += tolower(ch);
    }

    return answer;
}

풀이(2) 

#include <string>
#include <vector>
using namespace std;

string solution(string s) 
{
    string answer = "";
    answer += toupper(s[0]);

    for (int i = 1; i < s.size(); i++)
        (s[i - 1] == ' ') ? (answer += toupper(s[i])) : (answer += tolower(s[i]));

    return answer;
}

 똑같은 풀이인데, 이항 연산자를 이용하여 훨씬 깔끔하게 처리한 코드가 있어 가져와 보았다.

반응형