ingus kinematics 2022. 10. 4. 14:59

내 풀이

#include <string>
#include <iostream>

using namespace std;

#define ALPHABET_TRANS 32

string solution(string s) {
    string answer = "";

    int i=0;
    
    bool bSpaceFlag = false;
    
    while(s[i])
    {
        // 모든 문자에 해당, 대문자 -> 소문자
        if(s[i] >= 'A' && s[i] <= 'Z')
        {
            s[i] += ALPHABET_TRANS;
        }
        
        // 첫 번째 문자만 해당, 소문자 -> 대문자
        if(s[0] >= 'a' && s[0] <= 'z')
        {
            s[i] -= ALPHABET_TRANS;
        }
        
        // Space Flag : 공백문자를 체크하는 역할
        if(s[i] == ' ')
            bSpaceFlag = true;
        
        // 공백 문자 이후 + 모든 문자에 해당, 소문자 -> 대문자
        if((s[i] >= 'a' && s[i] <= 'z') && bSpaceFlag == true)
        {
            s[i] -= ALPHABET_TRANS;
            bSpaceFlag = false;
        }
        
        // 공백 문자 이후 + 숫자, 소문자 변환 취소
        if((s[i] >= '0' && s[i] <= '9') && bSpaceFlag == true)
        {
            bSpaceFlag = false;
        }
            
        i++;
    }
    
    answer = s;
    
    printf("정답 = %s\n", answer.c_str());
    
    return answer;
}

 

힘겹게 풀었습니다..

 

다른분들 풀이 보니까 굉장히 쉽게 하시던데.. 

쉽게 풀 수 있는 함수인 toupper와 tolower 함수에 대해서 알아보겠습니다.

추가적으로 삼항 조건 연산을 통해서 쉽게 풀이할 수 있는 방법까지...

 

다른 사람 풀이

*아래 코드는 박소영 님이 짜신 코드입니다.

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";

    answer += toupper(s[0]);
    for (int i = 1; i < s.size(); i++)
        s[i - 1] == ' ' ? answer += toupper(s[i]) : answer += tolower(s[i]);

    return answer;
}

 

풀이

풀이를 해보자면

 

입력으로 문자열 s가 들어올텐데, 첫 번째 문자를 toupper 함수를 사용해서 대문자로 바꾸어줍니다.

그 이후에 i가 1부터 s.size() 만큼 반복문을 돌려줍니다.

 

핵심은 반복문 안에서 돌아가는 코드입니다.

 

s[i - 1] == ' ' ? answer += toupper(s[i]) : answer += tolower(s[i]);

 

위 코드를 보았을 때, ? 기준으로 양 옆으로나눠야 합니다.

-> 삼항조건 연산자 공부 필요!

 

  1. s[i-1] == ' ' 여기서는 이전 문자가 공백인지 아닌지를 체크를 하고 공백이라면 1(true)을 출력, 아니라면 0(false)을 출력합니다.
  2. answer += toupper(s[i]) : answer += tolower(s[i]) 여기서는 true라면 현재 문자를 대문자로 바꾸고, false라면 현재 문자를 소문자로 바꿉니다.

 

*c++ 레퍼런스를 참조하면 toupper 함수의 사용법을 알 수 있습니다.

https://cplusplus.com/reference/cctype/toupper/

 

https://cplusplus.com/reference/cctype/toupper/

function <cctype> toupper Convert lowercase letter to uppercase Converts c to its uppercase equivalent if c is a lowercase letter and has an uppercase equivalent. If no such conversion is possible, the value returned is c unchanged. Notice that what is con

cplusplus.com