문자열 s를 입력받아서, 각 단어의 짝수 번째 알파벳은 대문자로, 홀수 번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 문제이다.
문자열 전체의 인덱스를 기준으로 하지 않고, 단어 별로 짝/홀수를 판단해야 한다.
처음에는 입력받은 문자열 s를 공백을 기준으로 잘라서 임시벡터에 넣고, 임시벡터를 기준으로 for문을 돌려서 풀었는데... 채점하니까 테스트 케이스가 일부 실패하는 현상이 있었다...
찾아보니 테스트 케이스 중에는 공백이 2개 이상인 것도 있었다..!!ㅜㅜ 나는 마지막에 공백을 제거해서 계속 실패했던 거였다...
ex)
입력값 : " aaa bbb cc "
출력값 : " AaA BbB Cc "
그래서 공백을 기준으로 문자열을 나누지 않고, 아예 문자열 전체를 for문을 돌렸다.
문자를 대소문자로 변경할 기준인 test 플래그를 두고, 해당 플래그가 true이면 대문자로, false면 소문자로 변환했다.
입력받은 문자열에 공백이 있으면 리턴할 문자열 answer 에 공백을 더하고, test를 true로 변경했다.
(공백 다음에 오는 문자는 무조건 대문자여야 하니까..)
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
string answer = "";
bool test = true;
for(int i = 0; i<s.size(); i++)
{
if(s[i] == ' ')
{
answer += " ";
test = true;
continue;
}
if(test == true)
{
answer += toupper(s[i]);
test = false;
}
else
{
answer += tolower(s[i]);
test = true;
}
}
return answer;
}
(기록용) 계속 실패했던 소스...
입력받은 문자열 s를 공백을 기준으로 잘라서 임시벡터에 넣은 후 각 문자들의 인덱스를 기준으로 짝수면 대문자로, 홀수면 소문자로 변경해줬다.
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
string answer = "";
vector<string> imsi;
string temp;
istringstream ss(s);
while(getline(ss, temp, ' '))
{
imsi.push_back(temp);
}
for(int i = 0; i<imsi.size(); i++)
{
string temp2 = imsi[i];
for(int j = 0; j <temp2.size(); j++)
{
if(j % 2 == 0)
{
answer += toupper(temp2[j]);
}
if(j % 2 != 0)
{
answer += tolower(temp2[j]);
}
}
answer += " ";
}
answer.pop_back();
return answer;
}
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 짝수와 홀수 (0) | 2021.01.05 |
---|---|
[프로그래머스] 시저 암호 (0) | 2021.01.03 |
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2021.01.03 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2020.12.31 |
[프로그래머스] 자릿수 더하기 (0) | 2020.12.31 |