문제 설명

모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 JadenCase 문자열을 return

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

 

프로그래머스

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

programmers.co.kr

 

문제 풀이법

if문의 조건을 통해 문제를 풀 수 있다

단, 조건을 세세히 줘야한다

 

우선, 문자열의 맨 앞이거나, 앞에 빈칸이 나왔을 경우와 그렇지 않은 경우로 나눈다

그렇지 않은 경우에는 문자가 대문자인 경우만 소문자로 변환하고, 아니면 그냥 문자열을 더한다

 

문자열의 맨 앞이거나, 앞에 빈칸이 나왔을 경우에는 문자가 숫자거나, 빈칸이거나, 대문자인 경우에는 그대로 입력하고 아닌 경우에는 소문자를 대문자로 바꿔서 저장한다

(문제를 풀었을 당시에는 반례들을 생각하며 쓰다보니 저렇게 or을 사용해서 조건을 걸었는데, 다시 생각해보니 소문자인 경우에만 대문자로 변환해주면 된다!)

 

소스 코드

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    
    int blank = 0;
    for(int i = 0; i < s.size(); i++) {
        if (i == 0 || blank == 1) {
            blank = 0;
            if ((s[i] >= '0' && s[i] <= '9') || s[i] == ' ' ||
               (s[i] >= 'A' && s[i] <= 'Z'))
                answer += s[i];
            else
                answer += s[i] - 32;
        }
        else
        {
            if (s[i] >= 'A' && s[i] <= 'Z')
                answer += s[i] + 32;
            else
                answer += s[i];
        }
        
        if (s[i] == ' ')
            blank = 1;
    }
    return answer;
}
복사했습니다!