모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열
단, 첫 문자가 알파벳이 아니라면 이어지는 알파벳은 소문자
ex)
input : "3people unFollowed me"
output : "3people Unfollowed Me"
단순히 문제만 본다면 어려울 것이 없는 문제 처럼 보인다.
하지만 집중해서 보지 않는다면 실수 하기 쉬운 문제다.
#include <string>
#include <vector>
using namespace std;
bool checkAP (char a){ //알파벳 대소문자 구분
if(a>='A'&&a<='Z'){
return false;
}
return true;
}
bool checkNum(char a){ //숫자와 알파벳 구분
if(a>='0'&& a<='9'){
return true;
}
return false;
}
string solution(string s) {
for(int i=0; i<s.size(); i++){
if(i==0||s[i-1]==' '){ //string이 첫 번째 칸 또는 공백 뒤(대문자 조건)
if(checkNum(s[i])||s[i]==' '){ //string이 숫자인지 공백인지 구분(무시조건)
continue;
}
if(checkAP(s[i])){ //string의 대소문자 확인
s[i]-='a'-'A';
}
}
else{
if(!checkAP(s[i])){ //string의 소문자 조건에서의 대문자 변환
s[i]+='a'-'A';
}
}
}
return s;
}
우리가 가장 기본적으로 신경써야 하는 조건은 크게 3가지다
위의 조건을 확인할 수 있는 함수를 만들어서 활용함으로써 더 효율적으로 풀 수 있었다.
첫 번째 주의사항이 위에서 말한 최대 함정이다.
저 함정 때문에 생각보다 시간이 많이 필요했던 문제다.
다음부터는 경우의 수를 더 꼼꼼히 신경써야 한다는 생각을 할 수 있었다.