본문 바로가기
프로그래머스 코딩테스트 문제/Level 2

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

by jyppro 2024. 11. 22.

JadenCase 문자열 만들기

 

문제 설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

 

제한사항

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
  • 숫자는 단어의 첫 문자로만 나옵니다.
  • 숫자로만 이루어진 단어는 없습니다.
  • 공백문자가 연속해서 나올 수 있습니다.

 

입출력 예

s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

 

시작 코드

#include <string>
#include <vector>

using namespace std;

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

 

나의 풀이

#include <string>
#include <vector>

using namespace std;

string solution(string s)
{
    string answer = "";
    bool inside = false; // 단어 안에 있는지 여부
    for(auto c : s)
    {
        if (c == ' ')
        {
            answer += ' ';
            inside = false;
        }
        else if (!inside)
        { // 단어 첫번째이면
            answer += toupper(c);
            inside = true;
        }
        else
        {
            answer += tolower(c);
        }
    }
    return answer;
}

 

코드 분석

bool 타입의 inside 변수를 false로 선언해주고, 반복문을 돌려 s의 요소 c를 검사합니다. 만약 c가 공백이라면 answer에 공백을 추가하고 inside는 false로 만들어줍니다. 다음 else if문에서는 첫 판정을 다르게 하기 위해 inside가 false인 경우를 만들어줬습니다. 이때는 answer에 c를 대문자로 변환하여 추가해주고 inside를 true로 만들어줍니다. 나머지 경우에는 answer에 c를 소문자로 변환하여 넣어줍니다. 그리고 answer를 리턴하면 종료됩니다.

 

풀이 설명

JadenCase 라는 말이 뭔가 어렵게 느껴지지만, 우리가 흔히 아는 방식인 첫글자가 대문자고 나머진 소문자인 문자를 가리키는 말입니다. 문제에서 원하는 건 s를 줄테니 첫글자가 대문자고, 나머진 전부 소문자인 형태로 바꿔달라는 것입니다. 입출력 예 1번을 통해 살펴보겠습니다.

 

처음에 코드가 시작되면 숫자 3을 만나게 됩니다. 그런데 이는 알파벳이 아닙니다. 하지만 문제에서는 이에 대해 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 된다고 알려주었습니다. 그래서 이는 if문에서 첫문자이기 때문에 else if문에 들어가지만, 숫자는 대소문자 구분이 없기 때문에 그대로 유지되어 추가됩니다. 이후 이어지는 문자들은 전부 else에 해당되어 그대로 추가됩니다. 그리고 단어를 구분하는 공백문자를 만나면 공백문자를 추가해주고, 첫글자를 판단하는 inside 변수를 다시 false로 만들어줍니다. 이 과정을 s가 끝날때까지 반복해주면 첫 글자가 대문자인 JadenCase 문자열이 만들어집니다.

 

<NEXT>

오늘은 정답률 78%의 연습문제 "JadenCase 문자열 만들기" 를 풀어보았습니다. 아직 Lv2의 초반이라서 그렇게 어려운 문제는 나오지 않고 있지만, 이제 좀 지나면 난이도가 꽤 올라갈 것이기 때문에 차근차근 공부해두는 것이 좋을 것 같습니다. 감사합니다.