포스트

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

코딩테스트 연습 - JadenCase 문자열 만들기 바로가기


문제 설명


01


잘못된 문제 접근

문제를 처음 풀 때, 마지막 제약 조건을 확인하지 못해서 C++ stringstream 을 활용한 풀이로 접근했었습니다.
stringstream 은 문자열 속 공백 개수와 상관없이 공백이 존재한다면
그곳을 기준으로 공백이 아닌 부분만 반환하기 때문에 첫 시도에서 실패했었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <string>
#include <sstream>
#include <vector>

using namespace std;

string solution(string s) {
    stringstream ss(s);
    string buf, answer = "";
    while(ss >> buf) {
        for(char& c : buf) {
            c = tolower(c);
        }
        if(isalpha(buf[0])) {
            buf[0] = toupper(buf[0]);
        }
        answer += (buf + " ");
    }
    answer.pop_back();
    return answer;
}


옳게된 문제 풀이

제약 조건을 확인해 보면 문자열의 최대 길이는 200 이므로
시간 복잡도가 \(O(N^3)\) 이내 완료되는 알고리즘을 선택하면 되므로
저는 순차 탐색 을 사용했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    if(isalpha(s[0])) {
        s[0] = toupper(s[0]);
    }
    
    for(int i = 1; i < s.length(); ++i) {
        if(s[i - 1] == ' ' && isalpha(s[i])) {
            s[i] = toupper(s[i]);
        } else if(isalpha(s[i])) {
            s[i] = tolower(s[i]);
        }
    }
    return s;
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.