프로그래머스(Level1) - 이상한 문자 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
try hello world는 세 단어 try, hello, world로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 TrY, HeLlO, WoRlD입니다. 따라서 TrY HeLlO WoRlD 를 리턴합니다.
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
string answer = s;
int wordIndex = 0;
for(int i=0; i<s.size(); i++){
if(s[i] == ' '){
wordIndex = 0;
continue;
}
if(wordIndex % 2 == 0)
answer[i] = toupper(answer[i]);
else
answer[i] = tolower(answer[i]);
wordIndex++;
}
return answer;
}
중요한 것은 문자열 전체의 짝/홀수 인덱스가 아니라, 단어별로 짝/홀수 인덱스를 판단해야 한다는 것이다!
s | h | i | i | m | c | h | o | i | ||
---|---|---|---|---|---|---|---|---|---|---|
return | H | i | I | m | C | h | O | i | ||
index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
word index | 0 | 1 | 0 | 1 | 0 | 1 | 2 |
단어별로 짝/홀수 인덱스를 판단하지 않고 전체로 판단하면, 위와 같이 예외 케이스가 발생할 수 있다. 그래서 wordIndex라는 변수를 주고, 그 변수로 단어별 인덱스를 저장해줬다. 그리고 대문자,소문자는 toupper, tolower를 사용하여 간단하게 해결!