프로그래머스의 JadenCase 문자열 만들기 (Lv2) 문제이다.


[ 문제풀이 ]

모든 단어의 첫 문자가 대문자 이고 그 외에 문자는 모두 소문자인 문자열을 만들어야 한다.

그렇다면, 우리는 대/소문자를 변경하기 위해서 2가지 조건을 생각해 볼 수 있다.

1. 현재 탐색하고 있는 문자가 소문자이고 , 그 전에 있는 문자가 띄어쓰기(' ') 인 경우

2. 현재 탐색하고 있는 문자가 대문자이고 , 그 전에 있는 문자가 띄어쓰기(' ')가 아닌 경우

이렇게 2가지를 체크해 주면 된다.


1번 조건을 보게되면 현재 소문자인데, 그 전에 있는 문자가 띄어쓰기라면, "모든 단어의 첫 문자가 대문자" 라는 문제의

조건에 위배되기 때문에 대문자로 바꿔주면 된다.

2번 조건을 보게되면 현재 대문자인데, 그 전에 있는 문자가 띄어쓰기가 아니라면, "그 외의 알파벳은 소문자" 라는 문제의

조건에 위배되기 때문에 소문자로 바꿔주면 된다.

그리고 ! 예외적으로 가장 앞에 있는 문자를 따로 처리해 주어야 한다.

왜냐하면 문자열에 가장 앞에 있는 문자는, 그 전에 문자가 존재하지 않는다. 즉 ! 띄어씌기 인지 아닌지 판단이 되지 않는

부분이기 때문에, 문자열의 가장 앞에 있는 문자는 예외적으로 무조건 대문자로 바꿔주는 과정이 필요하다.


[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <string>
#include <vector>
 
using namespace std;
 
char BigAlpha[26= 
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','Q','R',
'S','T','U','V','W','X','Y','Z' };
char SmallAlpha[26= 
'a','b','c','d','e',
'f','g','h','i','j',
'k','l','m','n','o',
'p','q','r','s','t',
'u','v','w','x','y','z' };
 
string solution(string s)
{
    if ('a' <= s[0&& s[0<= 'z') s[0= BigAlpha[s[0- 'a'];
    for (int i = 1; i < s.length(); i++)
    {
        if (s[i - 1== ' ' && ('a' <= s[i] && s[i] <= 'z'))
        {
            s[i] = BigAlpha[s[i] - 'a'];
        }
        else if (s[i - 1!= ' ' && ('A' <= s[i] && s[i] <= 'Z'))
        {
            s[i] = SmallAlpha[s[i] - 'A'];
        }
    }
    return s;
}
cs


+ Recent posts