문제

https://programmers.co.kr/learn/courses/30/lessons/12930

풀이

  • 문장 전체의 인덱스가 아니라, 문장에 포함된 단어별로 인덱스가 짝수인지 홀수인지 확인 해야 한다.
    • flag = true이면 대문자를 소문자로
    • flag = false이면 소문자를 대문자로
    • ' '이면 새로운 문자가 시작되므로, flag 를 true로 설정
  • 원래 대문자인 경우 그대로 대문자, 원래 소문자인 경우 그대로 소문자가 되야 한다.
  • 대문자 변환은 소문자 + 32
  • 소문자 변환은 대문자 - 32

코드

아스키코드 이용

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    bool flag = true;
    for(int i = 0; i < s.size(); i++) {

        if(s[i] == ' ') {
          answer += " ";
          flag = true;
      }
      else {
          if(flag) {
              flag = false;
              if(s[i] >= 'A' && s[i] <= 'Z') answer += s[i];
              else {
                  answer += s[i] - 32;
              }

          }
          else {
              flag = true;
              if(s[i] >= 'a' && s[i] <= 'z') answer += s[i];
              else {
                   answer += s[i] + 32;
              }


          }
      }
    }
    return answer;
}

toupper, tolower 이용

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    bool flag = true;

    for(int i=0; i < s.size(); i++){

        if( s.at(i) == ' ' ){
            answer += " ";
            flag = true;
        }
        else {

            if(flag){
                flag = false;
                answer += toupper(s[i]);
            }
            else {
                flag = true;
                answer += tolower(s[i]);
            }
        }
    }
    return answer;
}