본문 바로가기
코딩테스트 준비/프로그래머스

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

by 스테디코디스트 2023. 10. 31.
반응형

<문제 소개>


<소스 코드>

#include <string>
#include <vector>

using namespace std;

string solution(string s) 
{
    for(int i = 0; i < s.size(); i++)
    {
        if(i == 0 && (s[i] >= 'a' && s[i] <= 'z'))
        {
            // 처음 문자가 소문자인 경우 -> 대문자로 변경
            s[i] = s[i] - 'a' + 'A';
            continue;
        }
        
        if((s[i] == ' ') && (s[i + 1] >= 'a' && s[i + 1] <= 'z')) 
        {
            // 공백 다음 문자가 소문자인 경우 -> 대문자로 변경
            s[i+1] = s[i+1] - 'a' + 'A';
            continue;
        }
        
        if(i != 0 && s[i - 1] != ' ' && s[i] >= 'A' && s[i] <= 'Z')
        {
            // 첫문자도 아니고 이전 문자가 공백도 아닌데 대문자인 경우 -> 소문자로 변경
            s[i] = s[i] - 'A' + 'a';
        }
    }    
        
    return s;
}

<풀이과정>

1. 입력받은 문자열 s의 각 문자들을 for문을 이용하여 접근한다.

2. 먼저, 현재 문자가 첫 문자이고, 소문자인 경우를 판단해 대문자로 변경한다.

3. 다음으로, 현재 문자가 공백일 때, 다음 문자가 소문자인 경우를 판단해 대문자로 변경한다.

4. 마지막으로 첫 문자도 아니고, 이전 문자가 공백도 아닌데 현재 문자가 대문자인 경우에는 소문자로 변경한다.

5. 반복문이 모두 끝나 변경된 문자열 s를 리턴해준다.


<코멘트>

2단계 치고는 생각보다 어렵지 않게 풀었던 것 같다.

예외처리만 잘 하면 되는 것 같다!

그리고 다른 분들의 풀이를 보고 대문자 소문자를 바꿀 때 toupper, tolower 함수를 사용할 수 있다는 것을 알았다. 


<제출결과>