반응형
<문제 소개>
<소스 코드>
#include <string>
#include <vector>
using namespace std;
string solution(string s)
{
for(int i = 0; i < s.size(); i++)
{
if(i == 0 && (s[i] >= 'a' && s[i] <= 'z'))
{
// 처음 문자가 소문자인 경우 -> 대문자로 변경
s[i] = s[i] - 'a' + 'A';
continue;
}
if((s[i] == ' ') && (s[i + 1] >= 'a' && s[i + 1] <= 'z'))
{
// 공백 다음 문자가 소문자인 경우 -> 대문자로 변경
s[i+1] = s[i+1] - 'a' + 'A';
continue;
}
if(i != 0 && s[i - 1] != ' ' && s[i] >= 'A' && s[i] <= 'Z')
{
// 첫문자도 아니고 이전 문자가 공백도 아닌데 대문자인 경우 -> 소문자로 변경
s[i] = s[i] - 'A' + 'a';
}
}
return s;
}
<풀이과정>
1. 입력받은 문자열 s의 각 문자들을 for문을 이용하여 접근한다.
2. 먼저, 현재 문자가 첫 문자이고, 소문자인 경우를 판단해 대문자로 변경한다.
3. 다음으로, 현재 문자가 공백일 때, 다음 문자가 소문자인 경우를 판단해 대문자로 변경한다.
4. 마지막으로 첫 문자도 아니고, 이전 문자가 공백도 아닌데 현재 문자가 대문자인 경우에는 소문자로 변경한다.
5. 반복문이 모두 끝나 변경된 문자열 s를 리턴해준다.
<코멘트>
2단계 치고는 생각보다 어렵지 않게 풀었던 것 같다.
예외처리만 잘 하면 되는 것 같다!
그리고 다른 분들의 풀이를 보고 대문자 소문자를 바꿀 때 toupper, tolower 함수를 사용할 수 있다는 것을 알았다.
<제출결과>