728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[문제 설명]

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

 

제한 조건

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
    • 숫자는 단어의 첫 문자로만 나옵니다.
    • 숫자로만 이루어진 단어는 없습니다.
    • 공백문자가 연속해서 나올 수 있습니다.

입출력 예

s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

 


[문제 풀이]

문제 자체가 어렵지 않았지만... 처음 시작을 잘못잡아서 좀 시간이 걸렸다..

처음엔 stringstream을 사용하여 공백 기준으로 문자들을 나눠서 입력받는 방식으로 진행했고,

테스트 케이스까지는 문제 없었지만..

stringstream를 사용했더니 " "을 기준으로 나눠서 단어들만을 얻게되어서 한개 이상의 공백을 처리하는 부분을 생각하지 못해서 누락했다.

 

그래서 그냥 stringstream을 사용하지 않고, 인덱스를 하나하나 확인해서 boolean으로 첫문자인지를 확인하고,

첫문자는 uppercase, 나머지 문자는 lowercase로 변환해주도록 코드를 작성했다.   

변환해주는 함수는

uppercase - toupper()

lowercase - tolower()

을 사용하면 된다.

 

string 전체를 변경하는 함수도 있다.

 

transform(s.begin(),          s.end(),           s.begin(),                       ::tolower)     => lowercase

transform(s.begin(),          s.end(),           s.begin(),                       ::toupper)     => uppercase

                시작 iterator,     끝 iterator,      반환할 위치 iterator,       upper/lower 

 

위와 같이 사용하면 된다.

 

[코드]

[GitHub]

 

GitHub - EGyeom/ProblemSolving

Contribute to EGyeom/ProblemSolving development by creating an account on GitHub.

github.com

코드가 깨끗하고 명확하게 보일진 모르겠지만, 누군가에게 도움이 될 수도.. 있기에..

더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string s) {
    string answer = "";
	bool firstWord = true;
	for(char& c : s)
	{
		if(firstWord)
			c = toupper(c);
		else
			c = tolower(c);

		if(c == ' ')
			firstWord = true;
		else
			firstWord = false;
	}
    return s;
}
복사했습니다!