Patrick's Devlog

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

Study/Algorithms Practice

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

Patrick_ 2022. 9. 25. 15:13

1. 개요

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

 

프로그래머스

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

programmers.co.kr

1-1. 설명

JadenCase는 모든 단어의 첫문자가 대문자이고, 그 외 알파벳은 소문자인 문자열이다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수를 완성한다. 

1-2. 제한 사항

 - s의 길이 1 이상 200 이하 문자열

 - s는 알파벳, 숫자, 공백으로 이루어져 있으며 숫자는 첫 단어의 문자롬나 나옴

 - 숫자로만 이루어진 단어 X

 - 공백이 연속해서 나올 수 O


2. 구현

2-1. 풀이

split으로 나누어 맨 앞부분은 대문자, 그외는 소문자로 생각하여 풀었다. 그냥 단순하게 s의 앞에 공백이 있는지 확인하고 대문자, 소문자로 바꿔도 되는 것을 너무 돌아서 구현을 해버린 것 같다. 조금 더 간단히 구현할 수 있는 코드를 생각해볼 수 있게 되는 계기가 되었다. 

2-2. 코드

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

vector<string> split(string str, char delimiter);

string solution(string s) {
    string result = "";
    vector<string> splitStr = split(s, ' ');
    int index = 0;
    bool blankFlag = false;
    
    if (s[s.size()-1] == ' ') blankFlag = true;
    
    for (string str : splitStr) {
        for (int i = 0; i < str.size(); i++) {
            if (i == 0 && 'a' <= str[i] && 'z' >= str[i]) str[i] = toupper(str[i]);
            if (i != 0 && 'A' <= str[i] && 'Z' >= str[i]) str[i] = tolower(str[i]);
        }
        if (index != 0) result += ' ';
        result += str;
        index++;
    }
    
    if (blankFlag) result += ' ';

    return result;
}

vector<string> split(string input, char delimiter) {
    vector<string> result;
    stringstream stream(input);
    string temp;

    while (getline(stream, temp, delimiter)) result.push_back(temp);
    return result;
}