문제
풀이과정
문자열에 들어갈 수 있는 문자 종류는 대문자, 소문자, ③숫자, ④공백 총 4종류이다.
공백문자가 연속해서 나올 수 있다는 것을 유의하며 케이스를 분석하면,
① 단어 첫 글자가 소문자면 대문자로 바꾸기
② 첫 글자가 아닌 대문자면 모두 소문자로 바꾸기
이외에는 숫자와 공백 포함 모두 그대로 answer에 넣어주면 된다.
①번, 현재 가리키고 있는 글자가 단어의 첫 글자임을 판별하려면 바로 앞 글자가 공백인지 확인하면 된다.
i - 1번째 요소가 공백인지를 확인하면 되는데, i = 0일 때 에러가 나기 때문에 s[0]은 따로 판별해주었다.
②번은 이전 요소가 공백이 아님을 확인하고, 현재 요소가 대문자인지를 확인하면 소문자로 바꿔주면 된다.
공백과 대문자/소문자 확인은 <cctype> 라이브러리의 isspace(), isupper(), islower()로 하면 편하다.이외에도 숫자를 확인할 수 있는 isdigit(), 출력 가능한 문자를 확인할 수 있는 isprint() 등 다양한 함수가 포함되어 있다.
추가로, 대문자->소문자로 변환할 수 있는 tolower()와 소문자->대문자로 변환할 수 있는 toupper() 함수도 있다.
필자는 ASCII 코드와 cctype을 하나씩 사용하여 구현하였다.
소문자 a의 10진수 아스키코드는 97, 대문자 A의 10진수 아스키코드는 65이므로 숫자 32를 빼거나 더하면 된다.
풀이 코드
#include <string>
#include <vector>
#include <cctype>
using namespace std;
string solution(string s) {
string answer = "";
if (islower(s[0])) answer.push_back(s[0] - 32);
else answer.push_back(s[0]);
for (int i = 1; i < s.size(); i++) {
if (isspace(s[i - 1]) && islower(s[i])) answer.push_back(s[i] - 32);
else if (!isspace(s[i - 1]) && isupper(s[i])) answer.push_back(s[i] + 32);
else answer.push_back(s[i]);
}
return answer;
}
'coding test' 카테고리의 다른 글
[프로그래머스/level2] 영어 끝말잇기 (0) | 2024.01.17 |
---|---|
[프로그래머스/level2] 최댓값과 최솟값 (0) | 2024.01.17 |
[programmers/level3] 야근 지수 (0) | 2024.01.12 |