흐음 오늘 문제는 간단했는데.. 괜히 혼자 삽질을 했다.
https://school.programmers.co.kr/learn/courses/30/lessons/12951
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
모든 단어의 첫글자는 대문자, 나머지는 소문자로 변경해주면 되었다.
[첫번째 접근] sstream을 이용하자!
string을 스페이스 단위로 split해줄 수 있으므로, 처음에는 이걸 이용했다.
단어단위로 잘라오고, 조건에 맞게 변경해주었다.
이 때 대소문자 변경은, 아스키코드를 이용해주었다 (소문자 -> 대문자 : -32 해주기, 대문자 -> 소문자 : +32 해주기)
결과는... 실패였다!
문제점은 띄어쓰기였다.
내가 사용한 방법은 띄어쓰기를 전부 날려버려서, 매 단어마다 내가 임의로 띄어쓰기를 한 개 추가해주었다.
하지만 이렇게 되면 중간에 띄어쓰기가 여러번 나올때, 정답과 다른 결과를 낼 수 있었다!
[두번째 접근] 그냥 반복 돌리기
그래서 그냥 s문자열을 냅다 반복을 돌렸다.
일단 앞 문자열이 스페이스였는지를 확인하고, 스페이스였으면 대문자로 변경해준다.
아니면 소문자로 만들어서 그대로 냅둔다.
흠... 간단하게 풀었으면 금방 풀렸을것을...에잉
#include <string>
#include <vector>
#include <sstream>
using namespace std;
string solution(string s) {
string answer;
bool is_space = true;
char temp;
for(int i = 0; i<s.size(); i++){
if(s[i] == ' '){
is_space = true;
answer.push_back(s[i]);
continue;
}
if(is_space){
if(!isdigit(s[i])){
if(s[i] >= 97 && s[i] <= 122){
// 대문자로 바꾸기
s[i] -= 32;
}
}
}else{
if(s[i] >= 65 && s[i] <= 90){
// 소문자로 바꾸기
s[i] += 32;
}
}
is_space = false;
answer.push_back(s[i]);
}
return answer;
}
99클럽 코테 스터디 5일차 TIL : 전화번호 목록 (0) | 2024.07.26 |
---|---|
7/25 TIL : DFS (0) | 2024.07.26 |
7/24 TIL : 완전탐색 (1) | 2024.07.25 |
99클럽 코테 스터디 3일차 TIL : 문자열 내 마음대로 정렬하기 (1) | 2024.07.24 |
7/23 TIL : 완전탐색 (2) | 2024.07.24 |