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

YH·2023년 12월 20일
0

문제

JadenCase 문자열 만들기 : 문제 링크


문제 분석

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

  • 제한 사항

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

sreturn
"3people unFollowed me""3people Unfollowed Me"
"for the last week""For The Last Week"
  • 소문자 변환을 위해 transform() 함수를 사용하므로 algorithm 헤더를 include.
  • transform() 함수의 ::tolower 옵션을 통해 문자열 s를 모두 소문자로 변환. if문을 사용하여 문자열 s의 첫번째 문자가 알파벳이라면, 대문자로 변환. for loop를 통해 문자열 s의 두번째부터 마지막 이전 원소까지 순환하고, if문을 사용하여 공백을 발견하고 다음 인덱스의 문자가 알파벳이라면 해당 문자를 대문자로 변환. loop 탈출 후, 최종적으로 저장된 문자열 s를 return

algorithm 헤더의 transform() 함수 사용법
transform(first1, last1, d_first, unary_op);

  • first1 : 입력한 변수의 first 위치
  • last1 : 입력한 변수의 last 위치까지
  • d_first : 저장할 변수의 first 위치
  • unary_op : 변환할 방법이 있는 함수 (대문자로 : toupper, 소문자로 : tolower)

풀이

#include <string>
#include <algorithm>

using namespace std;

string solution(string s) {
    transform(s.begin(), s.end(), s.begin(), ::tolower);
    if('a' <= s[0] && s[0] <= 'z') s[0] -= 32;
    for(int i = 1; i < s.size() - 1; ++i) {
        if(s[i] == ' ' && 'a' <= s[i + 1] && s[i + 1] <= 'z') s[i + 1] -= 32;
    }
    return s;
}
profile
Keep Recycling Your Dreams

0개의 댓글