Algorithm/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;
}