1. 문제

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항
  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s return
"try hello world" "TrY HeLlO WoRlD"
" try hello world " " TrY HeLlO WoRlD "
"try  hello world"
"TrY  HeLlO WoRlD"

 

2. 코드

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

string solution(string s) {
    string answer = "";
    int space = 0;
    int count = 0;

    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == ' ')
        {
            space++;
            count = 1;
            if (space >= 2)
            {
                answer.push_back(s[i]);
                count = 0;
                continue;
            }
        }
        
        if (count % 2 == 0)
        {
            answer.push_back(toupper(s[i]));
            count++;   
        }
        else if (count % 2 == 1)
        {
            answer.push_back(tolower(s[i]));
            count++;
        }
    }
    
    return answer;
}

 

3. 분석

string 형태의 s를 받아, 짝수번째 인덱스의 문자는 대문자로, 홀수번째 인덱스의 문자는 소문자로 만드는 문제이다.

제한 사항에 공백에 대한 제한이 없기 때문에, 공백이 맨 앞 또는 맨 뒤에 위치할 수 있고, 연속으로 위치할 수도 있다.

(테스트 케이스 추가하기를 사용하여 두번째, 세번째 케이스를 추가한 후에 테스트해보자)

 

따라서 space 변수를 사용하여 공백이 연속적으로 있는지 체크하고, count 변수를 사용하여 공백이 있다면 해당 인덱스를 보정해주는 역할을 한다.

(공백 바로 다음 인덱스의 문자는 대문자이어야 함)

 

대문자는 string 헤더에 포함된 std::toupper 함수, 소문자는 std::tolower 함수를 사용한다.