초보 개발자의 이야기, 릿허브

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

코딩테스트/📘 프로그래머스 (programmers)

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

릿99 2021. 9. 14. 08:39
728x90
반응형
1. 문제이해

https://programmers.co.kr/learn/courses/30/lessons/12951

 

코딩테스트 연습 - JadenCase 문자열 만들기

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건

programmers.co.kr

 

주어진 문자열을 Jaden Case 형식의 문자열로 바꾸어 리턴하는 것이 목표이다.

 

 

 

2. 문제풀이

 

Jaden Case 문자열이란, 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열이다.

즉, 첫 문자와 공백 뒤의 문자열이 모두 대문자, 이외의 문자는 소문자로 표기해야한다.

이를 유의하여, 다음과 같은 3가지 조건을 만족하는 코드를 작성해주었다.

 

1. 첫 문자가 소문자면 대문자로 바꿈

2. 공백 뒤의 문자열이 모두 대문자인지 확인 (아니라면 대문자로 바꿔줌)

3. 첫 문자, 공백 뒤 문자열을 제외한 문자중 대문자가 있는지 확인 (있으면 소문자로 바꿔줌)

 

문자가 소문자인지, 대문자인지를 판단하고, 이를 바꾸는 함수들은 C++에 내장되어있는 함수들을 이용했다.

이에 대해서도 간단히 짚고 넘어가자.

 

<소문자, 대문자를 판단하는 함수>

islower : 문자가 소문자인지를 판별. 소문자가 아니면 0을 반환.

isupper : 문자가 대문자인지를 판별. 대문자가 아니면 0을 반환.

 

<소문자를 대문자로, 대문자를 소문자로 변환하는 함수>

tolower : 대문자를 소문자로 변환.

toupper : 소문자를 대문자로 변환.

 

주어진 틀은 다음과 같았다.

 

 

 

 

3. 소스코드
#include <string>
#include <vector>
#include <cctype>

using namespace std;

string solution(string s) {
    string answer = "";
   
    // 1. 첫 글자를 모두 대문자로 변환   
    if(islower(s[0])){  // 첫 글자가 소문자면
        s[0] = toupper(s[0]);   // 대문자로 변환
    }
    
    // 2. 공백 뒤 첫글자를 모두 대문자로 변환
    for(int i = 0; i < s.size(); i++) {
        if(s[i] == ' ') {  // 공백을 만나면 
            s[i + 1] = toupper(s[i + 1]);  // 다음 글자를 대문자로 변환
        }
    }
    
    // 3. 공백 뒤 첫글자가 아닌 대문자들을 소문자로 변환
    for(int i = 1; i < s.size(); i++) {
        // 대문자이고, 앞 글자가 공백이 아니면
        if(isupper(s[i]) && s[i - 1] != ' '){
            s[i] = tolower(s[i]);  // 해당 글자를 소문자로 변환
        }
    }
    
    // 변환된 s를 answer 값에 대입
    answer = s;
    
    return answer;
}

위의 3가지 조건을 만족하는 코드를 다음과 같이 작성하였다.

 

1. 첫 if문을 통해, 첫 글자가 소문자이면, 대문자로 변환했다.

 

2. for문을 통해 첫 글자부터 시작해, 공백을 찾고,

공백을 찾으면 해당 공백 뒤의 문자를 대문자로 변환했다.

 

3. for문을 통해 두번째 글자부터 시작해, 대문자이면서 이전값이 공백이 아닌 문자를 찾고,

해당 문자를 소문자로 변환했다.

(맨 첫번째 값은 이미 변환완료했으므로, 두번째 글자인 s[1]부터 시작했다.)

 

 


프로그래머스와 백준 문제들을 번갈아가면서 풀고 있는 중이다.🧐

시간이 예전보다는 조금 여유가 있어서

당분간은 코딩과 블로그 포스팅에 집중해야지✍

 

 

 

 

728x90
반응형