본문 바로가기

알고리즘/[프로그래머스]Lv.2

[프로그래머스]Lv2. JadenCase 문자열 만들기

본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+  Java언어 내용도 포함되어있습니다. )

 

https://school.programmers.co.kr/learn/courses/30/lessons/12951?language=java 

 

프로그래머스

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

programmers.co.kr

 

 

1.문제설명

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

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

 

2. 문제해결 접근

  • 띄어쓰기 다음 첫 문자를 문자로 지정한다 -> split(" ")으로 띄어쓰기로 문자열을 나눈 후, 나눈 배열값마다 첫 인덱스를 지정
  • 지정한 문자가 숫자나 소문자가 아닐때, 대문자로 지정 -> substring()으로 첫 문자 하나만을 지정  toUpperCase()로 대문자로 바꿔 저장한다.
  • 첫 문자가 숫자일 경우, 숫자 그대로 출력한다 -> 고려할 필요 없었음
  • 그 이외의 다른 무자는 소문자로 변환한다 -> substring()으로 첫문자 이후 문자열끝까지를 지정, toLowerCase()로 소문자로 바꿔 저장한다.
  • 공백문자가 연속해서 나올 경우 하나로 바꾼다 -> 위의 경우를 순차적용 후, 배열의 마지막 값에 하나의 공백문자를 추가한다
  • 원래의 문자열 마지막이 공백일 경우는 그대로 유지해야한다
  • 위 반복문에서 마지막에 공백이 더하는 로직이 포함되어있으므로, 마지막 값의 공백을 제거하는 로직이 필요하다.

 

3.답안 : [언어 : java ]

class Solution {
    public String solution(String s) {
        String answer = "";
		 //split()를 이용하여 공백을 기준으로 문자열 자르기
		 String[] sp = s.split(" ");
		 
		 for (int i = 0; i < sp.length; i++) {
//			System.out.println( sp[i] );
			// 만약, sp에 빈문자열이 들어있다면, 공백을 추가해여 배열을 채워준다.
			if( sp[i].length() == 0 ) answer += " ";
			else {
				// sp[i]의 첫문자 하나만 대문자로 전환한다
				answer += sp[i].substring(0, 1).toUpperCase();
				
				// sp[i]의 두번째문자부터 문자끝까지 
				answer += sp[i].substring(1, sp[i].length()).toLowerCase();
				
				answer += " ";
			}
			
			 
		}
		// 원래의 문자열 마지막이 공백일 경우에, 그대로 answer 반환
		if(s.substring(s.length()-1, s.length()).equals(" "))return answer;
		
		//위 반복문에서 마지막에 공백이 더해져 그 공백을 제외한 answer 값 반환
		return answer.substring(0, answer.length()-1);
    }
}

 

4. C++ 답안

C++경우는 보다 간결하게 처리되었다.

 

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    // 문자열 s[0] 대문자로 변환한다.
    answer += toupper(s[0]);

    for(int i=1; i<s.size(); i++){
    	// 0번째 인덱스가 빈문자일경우
        if(s[i-1] == ' '){
        // 다음인덱스를 대문자로 변환하여 저장한다
            answer += toupper(s[i]);
        }else{
        // 나머지는 소문자로 저장한다.
            answer += tolower(s[i]);
        }
    }

    return answer;
}

 

5. C++ 문법 설명과 표현법

 

c++ 에서는 toupper(인덱스), tolower(인덱스)로 표현한다.

 

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kimjd921&logNo=40198075816 

 

C++ tolower, toupper 대소문자 변환

오늘은 입력된 string 문자열(영문)을 대/소문자로 변경하는 법을 설명 하겠다. 프로그램을 하다보면 입력 ...

blog.naver.com