문제
https://school.programmers.co.kr/learn/courses/30/lessons/12951
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string solution(string s) {
string answer = "";
bool upper = true;
for(int i=0; i<s.length(); i++) {
if(upper) {
if('a' <= s.at(i) && s.at(i) <= 'z') answer += (s.at(i) - 32);
else answer += s.at(i);
upper = false;
} else {
if('A' <= s.at(i) && s.at(i) <= 'Z') answer += (s.at(i) + 32);
else answer += s.at(i);
}
if(s.at(i) == ' ') upper = true;
}
return answer;
}
풀이
upper 라는 boolean 변수를 두어 단어의 시작인지 아닌지를 확인한다.
만약 upper 가 true 라면 단어의 시작이므로 소문자라면 대문자로 바꿔주고, false 라면 단어가 진행 중으로 대문자라면 소문자로 바꿔준다.
공백을 만나면 단어가 끝났으므로 upper 를 true 로 다시 갱신한다.