[C++/프로그래머스] JadenCase 문자열 만들기

다곰·2022년 10월 7일
0

우당탕탕 코테준비

목록 보기
5/98

✅ LV. 2

✏️ 1차 솔루션

  1. 공백 문자를 기준으로 문자열을 분할 ➡️ 문자열 분할 함수 사용
  2. 분할한 문자의 첫글자는 대문자로, 나머지 글자는 소문자로 변경한 후 vector에 넣기 ➡️ ASCII 코드 연산으로 대소문자 변환
  3. 기존의 단어간 공백은 vector 에 저장했던 단어 출력할 때마다 띄어쓰기 적용해주고 맨 마지막 단어 출력한 이후에는 쓸 데 없는 공백을 제거하기 위해 erase 함수로 공백 제거해줌

🔗 [C++] split 함수
🔗 [C++] erase 함수

🚨 1차 trouble

공백이 연속해서 있을 수 있기 때문에 공백도 하나의 단어처럼 vector에 함께 넣어 출력해줘야함

✏️ 2차 솔루션

  1. 공백을 만나기 전까지는 string 변수에 각 문자를 저장하기
  2. 공백을 만나면 한 단어가 끝났다고 간주해, 대소문자 변환 후,vectorstring 변수 Push

🚨 2차 trouble

공백도 검사하고 ASCII 코드도 대문자 영역에 해당하는지, 소문자 영역에 해당하는지 검사하고 검사할 조건들이 너무 많아져서 if문, for문 남발하는 비효율적인 코드

✏️ 3차 솔루션

  1. 현재 검사하는 문자가 공백일 경우 바로 vector에 Push
  2. 일단 공백이 아닌 모든 문자는 소문자 처리
  3. 첫번째 문자이거나 앞 문자가 공백일 경우 대문자로 바꾸기

➡️ 입력받은 문자열을 그대로 바꿔준 후 그대로 출력하는 방법이기 때문에 불필요한 메모리 낭비도 안할 수 있음

❗️ 가장 중요한 것은 대소문자 변환시, ASCII 코드 연산을 하는 것이 아니라 toupper, tolower 함수 사용하기!

🔗 [C++] 대소문자 변환

✏️ 최종 코드

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    
    for(int i=0;i<s.size();i++) {
        if(s[i]!=' ') s[i]=tolower(s[i]);
        
        if(i==0 || s[i-1]==' ') {
            s[i]=toupper(s[i]);
        }

    }
    
    return s;
}
profile
다교미의 불꽃 에러 정복기

0개의 댓글