문제 설명
제한 사항 및 입출력 예제
개념
첫 문자를 대문자로 처리하고 나머지 알파벳을 소문자로 처리하는 문자열 처리 문제다. 입력 문자열에서 각 단어의 첫 문자를 대문자로, 그 외의 알파벳을 소문자로 바꾸는 작업이 필요하다. 여기서 '단어'는 공백 문자로 구분되므로, 문자열을 순회하며 공백 문자를 만났을 때 그 다음 문자를 대문자로 바꿔주면 된다.
풀이
#include <string>
#include <vector>
using namespace std;
string solution(string s)
{
string answer;
bool isTrue = false;
answer += toupper(s[0]);
s = s.substr(1);
공백 문자를 만났는지 여부를 체크할 플래그 변수 isTrue를 false로 초기화해준다. 그리고 첫 문자는 항상 대문자여야 하므로, 변환하고 입력 문자열에서 제거해준다.
for (const auto& ch : s)
{
if (ch == ' ')
{
isTrue = true;
answer += ch;
continue;
}
if (isTrue)
{
answer += toupper(ch);
isTrue = false;
}
else
answer += tolower(ch);
}
return answer;
}
공백을 만났을 때 플래그를 true로 체크해주고, 다음 반복으로 넘긴다. 새로운 단어의 시작이라면, 해당 문자를 대문자로 변환하고 플래그를 해제해준다. 그렇지 않으면 해당 문자를 소문자로 변환해준다.
총합본
더보기
#include <string>
#include <vector>
using namespace std;
string solution(string s)
{
string answer;
bool isTrue = false;
answer += toupper(s[0]);
s = s.substr(1);
for (const auto& ch : s)
{
if (ch == ' ')
{
isTrue = true;
answer += ch;
continue;
}
if (isTrue)
{
answer += toupper(ch);
isTrue = false;
}
else
answer += tolower(ch);
}
return answer;
}
풀이(2)
#include <string>
#include <vector>
using namespace std;
string solution(string s)
{
string answer = "";
answer += toupper(s[0]);
for (int i = 1; i < s.size(); i++)
(s[i - 1] == ' ') ? (answer += toupper(s[i])) : (answer += tolower(s[i]));
return answer;
}
똑같은 풀이인데, 이항 연산자를 이용하여 훨씬 깔끔하게 처리한 코드가 있어 가져와 보았다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 최댓값과 최솟값 with C++ (0) | 2023.05.29 |
---|---|
[프로그래머스] 올바른 괄호 with C++ (0) | 2023.05.28 |
[프로그래머스] 이중우선순위큐 with C++ (0) | 2023.05.26 |
[프로그래머스] 신고 결과 받기 with C++ (0) | 2023.05.25 |
[프로그래머스] n^2 배열 자르기 with C++ (0) | 2023.02.06 |