문제 링크 https://programmers.co.kr/learn/courses/30/lessons/12945

문제

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고) 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한사항

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(“ “)로 이루어져 있습니다.
  • 숫자는 단어의 첫 문자로만 나옵니다.
  • 숫자로만 이루어진 단어는 없습니다.
  • 공백문자가 연속해서 나올 수 있습니다.

풀이 과정

다른 문제와 차이점은 str가 공백일 때도 벡터에 넣어준다는 점이다.
그 이유는 공백문자가 연속해서 나올 수도 있기 때문이다.

일단 처음에 다 소문자로 바꿔준 뒤, 벡터에 넣은 값 인덱스 0값이 소문자라면 대문자로 바꿔준다. 그리고 마지막 인덱스를 제외하고 뒷부분에 공백을 붙여준다.

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    for(int i = 0; i < s.size(); i++){
        if('A' <= s[i] && s[i] <= 'Z') s[i] += 32;
    }
    vector<string> v;
    string str = "";
    for(int i = 0; i < s.size(); i++){
        if(s[i] == ' '){
            v.push_back(str);
            str = "";
        }
        else str += s[i];
    }
    v.push_back(str);

    for(int i = 0; i < v.size(); i++){
        if('a' <= v[i][0] && v[i][0] <= 'z') v[i][0] -= 32;
        answer += v[i];
        if(i != v.size() - 1) answer += ' ';
    }
    return answer;
}

댓글남기기