[프로그래머스] Jaden Case
📒Jaden Case
📌문제설명
모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열
단, 첫 문자가 알파벳이 아니라면 이어지는 알파벳은 소문자
ex)
input : "3people unFollowed me"
output : "3people Unfollowed Me"
모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열
단, 첫 문자가 알파벳이 아니라면 이어지는 알파벳은 소문자
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가지다
- 숫자와 알파벳의 구분
- 대소문자의 위치
- 대소문자의 구분 기준 (공백)
위의 조건을 확인할 수 있는 함수를 만들어서 활용함으로써 더 효율적으로 풀 수 있었다.
📌주의사항
- Test Case에서의 연속된 공백의 Case를 생각해야한다.
- 공백의 중복 조건이 없다면 모두 틀릴 수 있는 case - 내가 어떤 것을 구분해야 하는지 명확하게 알아야 한다.
- 무엇을 구분해야하는지 알아야 필요한 함수를 구현할 수 있다 - 실제 코딩 테스트에서 ASCII CODE 표는 주어지지 않을 수 있다.
- 대소문자 변환같은 경우 ASCII CODE 표 없이 'a'-'A'를 활용하자~!!
첫 번째 주의사항이 위에서 말한 최대 함정이다.
저 함정 때문에 생각보다 시간이 많이 필요했던 문제다.
다음부터는 경우의 수를 더 꼼꼼히 신경써야 한다는 생각을 할 수 있었다.
Author And Source
이 문제에 관하여([프로그래머스] Jaden Case), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gomhyeok/프로그래머스-Jaden-Case저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)