<프로그래머스 C++> Jaden Case 문자열 만들기 풀이( toupper(), tolower() )

2026. 6. 10. 10:09Programmers

문제

모든 단어의 첫 문자는 대문자, 나머지는 소문자인 Jaden Case 문자열로 변환하는 문제이다.

첫 문자가 숫자일 경우 이어지는 알파벳은 소문자로 쓴다.

공백이 연속으로 나올 수 있다.


 

풀이 아이디어

substr로 단어를 나눠서 처리해야겠다 라고 생각했으나 문자를 하나씩 순회하면서 처리하는 것이 더 단순할 것 같아 이렇게 처리했다.

 

공백 다음 문자 또는 첫번째 문자가 대문자, 그 외는 전부 소문자이다.

i == 0이거나 s[i-1] == ' '일 때 단어의 시작으로 판단하면 된다.


문제 풀이

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

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

    for(int i = 0; i < s.size(); ++i)
    {
        char a;
        if(i == 0 || s[i-1] == ' ')
            a = toupper(s[i]);
        else
            a = tolower(s[i]);

        answer += a;
    }
    return answer;
}

코드 흐름

1. 단어 시작 판별

if(i == 0 || s[i-1] == ' ')
    a = toupper(s[i]);
else
    a = tolower(s[i]);

두 가지 경우에 대문자로 변환한다.

  • i == 0 : 문자열의 첫 번째 문자
  • s[ i - 1 ] == ' ' : 바로 앞 글자가 공백인 경우 (공백 다음의 문자는 단어의 시작이기 때문)

공백이 연속으로 나오는 경우도 자동으로 처리된다. toupper()를 공백에 적용해도 공백 그대로 반환되기 때문이다.

2. 대소문자 변환

a = toupper(s[i]);  // 대문자로 변환
a = tolower(s[i]);  // 소문자로 변환

toupper(), tolower()는 <cctype> 헤더에 정의된 함수다.

알파벳이 아닌 문자(숫자, 공백)에 적용하면 그대로 반환한다.

그래서 첫 문자가 숫자인 경우도 별도 처리 없이 자연스럽게 처리된다.


핵심 포인트

 

  • 단어 시작은 i == 0 또는 s[i-1] == ' '으로 판별한다
  • toupper(), tolower()는 알파벳이 아닌 문자에 적용해도 그대로 반환하므로 숫자/공백 예외 처리가 필요 없다