https://school.programmers.co.kr/learn/courses/30/lessons/12951
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
stringstream으로 공백 분리해서 소문자를 대문자로 바꾸는 코드를 구현했다가, 연속으로 공백이 나오는 케이스는 경우 올바른 답을 구할 수 없었다.
따라서, 처음부터 모든 문자열을 탐색했다.
이전 문자가 공백인지, 문자였는지에 따라 대소문자를 변경하기 위해 prev 변수 하나를 사용한다.
1. 문자열 s에 대해 for loop를 돌며 현재 문자가 공백인지 아닌지 판단한다.
2. 공백이라면 answer에 공백을 추가한다.
3. 공백이 아니며, 이전 문자가 공백이었고 현재 문자가 소문자라면 대문자로 변경한다.
4. 공백이 아니며, 이전 문자가 공백이 아니고, 문자열의 처음이라면 대문자로 변경한다.
5. 공백이 아니며, 이전 문자가 공백이 아니고, 문자열의 처음도 아니라면, 소문자로 변경한다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string solution(string s) {
string answer = "";
char prev;
for (int i=0; i<s.size(); i++){
if (s[i]==' '){
answer+= ' ';
}
else{
if (prev==' '){
if (islower(s[i])) s[i]=toupper(s[i]);
}
else{
if (i==0){
if (islower(s[i])) s[i]=toupper(s[i]);
}
else{
if (isupper(s[i])) s[i]=tolower(s[i]);
}
}
answer+=s[i];
}
prev = s[i];
}
return answer;
}
'프로그래머스 > Lv.2' 카테고리의 다른 글
[C++] 프로그래머스 의상 (0) | 2023.02.23 |
---|---|
[C++] 프로그래머스 괄호 회전하기 (0) | 2023.02.21 |
[C++] 프로그래머스 문자열 압축 - 완전탐색 (0) | 2023.02.18 |
[C++] 프로그래머스 거리두기 확인하기 - BFS (0) | 2023.02.14 |
[C++] 프로그래머스 숫자 블록 (0) | 2023.02.13 |