1. 문제설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
2. 제한사항
● s는 길이 1 이상 200 이하인 문자열입니다.
● s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
○ 숫자는 단어의 첫 문자로만 나옵니다.
○ 숫자로만 이루어진 단어는 없습니다.
○ 공백문자가 연속해서 나올 수 있습니다.
3. 입출력 예시
s |
return |
"3people unFollowed me" |
"3people Unfollowed Me" |
"for the last week" |
"For The Last Week" |
4. 나의풀이
- 첫 번째 시도(실패)
- Split(' ')을 사용해 s를 공백을 기준으로 나눠 string배열에 담음.
- 첫 문자만 ToUpper해주고 나머지는 전부 ToLower해줘서 answer에 넣어줌.
- 런타임 에러 발생! >>> 제한사항에서 공백문자가 연속해서 나올 수 있다고 함. 한 개의 공백을 기준으로 나눴기 때문에 공백 문자가 2개 이상 이어져있다면 string배열에 공백도 담기게 됨.
- 두 번째 시도(성공)
- Split이 아니라 공백을 찾고 그 다음에 공백이 아닌 문자가 오면 ToUpper해주는 형식.
- bool을 사용해 대문자로 만들건지 아님 그냥 추가할건지 판별.
- 한 번 놓친 포인트! >>> 입출력 예시처럼 문자열 사이에 있는 공백은 기존의 s에 원래부터 있던 공백임. 그러니 문자 사이에 공백이 한 개이든 두 개이든 100개이든 전부 추가해줘야 됨. 대문자로 변경한 문자를 answer에 넣기 전에 공백 하나만 넣어주면되는 것이 아니었음.
public string solution(string s)
{
string answer = "";
// 전부 소문자로 변경.
s = s.ToLower();
// 대문자로 바꿔도 되는지 판단할 변수.
// 첫 문자가 공백이 아니라면 대문자로 변경해줘야하니 처음은 true.
bool isTryUpper = true;
for (int i = 0; i < s.Length; i++)
{
// 이번 문자가 공백이라면 answer에 넣어주고 isTryUpper는 true로 변경.
// true시킨 후 공백문자가 다음 if문을 갈 수 있기 때문에 continue.
if (s[i] == ' ')
{
answer += ' ';
isTryUpper = true;
continue;
}
// 대문자로 변경시킬 문자라면 변경해주고 answer에 추가.
// 이어지는 문자는 대문자로 변경시키면 안되기 때문에 isTryUpper는 false로 변경.
if (isTryUpper == true)
{
char ch = char.ToUpper(s[i]);
answer += ch;
isTryUpper = false;
}
else
{
// 대문자로 변경시킬 문자가 아니라면 바로 answer에 추가.
answer += s[i];
}
}
return answer;
}