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

Algorithm/문제풀이

2022. 12. 26. 19:14


문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문자열 s가 주어지면 공백을 기준으로 단어를 나눈다.

단어의 맨 처음 글자는 대문자, 나머지 글자는 소문자로 반환하는 문제였다.

 

원래 내가 쓴 풀이가 있는데, 몇몇 TC에서 실패를 내보냈다. (뒤에서 참고)

그래서 타인의 훌륭한 풀이를 참고하였다.

 

풀이 전략

첫 글자를 대문자화해서 answer에 담는다.

두번째 글자부터 for 문으로 공백을 찾아서 변환해간다.

 

상세

1. answer에 s의 첫 번째 글자를 대문자화 해서 담는다.

더보기
answer += toupper(s[0]);

 

2. 두 번째 글자부터 일순하여

이전 칸이 공백이라면 대문자화,

아니라면 소문자화 해서 answer에 담는다.

더보기
for(int i = 1; i < s.size(); ++i)
{
    if(s[i - 1] == ' ')
        answer += toupper(s[i]);
    else
        answer += tolower(s[i]);
}

 

전체 소스코드

#include <string>
using namespace std;

string solution(string s) {
    string answer = "";

    answer += toupper(s[0]);

    for(int i = 1; i < s.size(); ++i)
    {
        if(s[i - 1] == ' ')
            answer += toupper(s[i]);
        else
            answer += tolower(s[i]);
    }

    return answer;
}

 

기존 나의 풀이와 틀렸던 점

(아직 미해결)

원래 나는 임시저장소(store)에 담아두는 풀이를 자주 썼다.

공백을 기준으로 일단 단어를 

그런데 틀렸다.

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

string solution(string s) {
    string answer = "";
    string store;

    s.push_back(' ');

    for(char ch : s)
    {
        if(ch == ' ')
        {
            if(store.size())
            {
                store[0] = toupper(store[0]);

                for(int i = 1; i < store.size(); ++i)
                    store[i] = tolower(store[i]);

                store.push_back(' ');

                answer += store;
                store.clear();
            }
        }

        else store.push_back(ch);
    }

    answer.pop_back(); // last whitespace remove

    return answer;
}