본문 바로가기
프로그래머스/Lv.2

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

by MINU.SHINNNN 2023. 2. 20.

https://school.programmers.co.kr/learn/courses/30/lessons/12951

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

stringstream으로 공백 분리해서 소문자를 대문자로 바꾸는 코드를 구현했다가, 연속으로 공백이 나오는 케이스는 경우 올바른 답을 구할 수 없었다.

따라서, 처음부터 모든 문자열을 탐색했다. 

이전 문자가 공백인지, 문자였는지에 따라 대소문자를 변경하기 위해 prev 변수 하나를 사용한다.

1. 문자열 s에 대해 for loop를 돌며 현재 문자가 공백인지 아닌지 판단한다.

2. 공백이라면 answer에 공백을 추가한다. 

3. 공백이 아니며, 이전 문자가 공백이었고 현재 문자가 소문자라면 대문자로 변경한다.

4. 공백이 아니며, 이전 문자가 공백이 아니고, 문자열의 처음이라면 대문자로 변경한다.

5. 공백이 아니며, 이전 문자가 공백이 아니고, 문자열의 처음도 아니라면, 소문자로 변경한다.

#include <string>
#include <vector>
#include <iostream>

using namespace std;

string solution(string s) {
    string answer = "";
    char prev;
    for (int i=0; i<s.size(); i++){
        if (s[i]==' '){
            answer+= ' ';
        }
        else{
            if (prev==' '){
                if (islower(s[i])) s[i]=toupper(s[i]);
            }
            else{
                if (i==0){
                    if (islower(s[i])) s[i]=toupper(s[i]);
                }
                else{
                    if (isupper(s[i])) s[i]=tolower(s[i]);
                }
            }
            answer+=s[i];
        }
        
        prev = s[i];
    }
    return answer;
}