[ Programmers ] JadenCase 문자열 만들기 (Java)

ma.caron_g·2021년 12월 6일
0

Lv.2 - Programmers

목록 보기
2/14
post-thumbnail

1. Problem 📃

[ JadenCase 문자열 만들기 ]

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


[ 문제 설명 ]

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

문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.


2. Constraint 🔗

[ 제한 사항 ]

  • s는 길이 1 이상인 문자열입니다.
  • s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
  • 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )

3. Example 📚

[ 입출력 예시 ]

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

4. Solution 🔑

  1. 첫 문자의 기준은 띄어쓰기를 기준으로 그 다음 나타난 문자라고 볼 수 있다.
    따라서 boolean을 통해 띄어쓰기 기준을 잡아준다.
    (나는 true일 때 첫 문자로 판단하도록 나타내고 true일 때 대문자로 변경해줬다.)

  2. 우선 입력 받은 문자열을 모두 문자열.toLowerCase();를 통해 문자 모두 소문자로 바꾸고 split("")을 통해 문자열 배열에 한 문자씩 담아두었다.

  3. 가장 첫 문자는 당연히 대문자일테니 boolean값을 true값으로 시작한다.
    if문을 통해 true값이면 들어온 값을 문자열.toUpperCase();을 통해 대문자로 받아
    StringBuilderappend 해주고 boolean값을 false값으로 변경한다.

  4. 그 다음 값들은 띄어쓰기가 나올 때 까지 한 문자 한 문자 append 해주고 들어온 값이 공백(" ") 값이라면 boolean을 true값으로 변경하여 이를 반복하여 StringBuilder에 담아준다.

  5. answer에 StringBuilder.toString()을 통해 최종 문자열을 answer에 담고 값을 반환한다.

5. Code 💻

[처음 풀은 코드]

class Solution {
	public String solution(String s) {
		String answer = "";
		s = s.toLowerCase();
		boolean swit = true;
		char[] c = s.toCharArray();
		
		for(int i=0; i<c.length; i++) {
			if(c[i] >= '0' && c[i] <='9') {
				answer += c[i];
				swit = false;
			}
			else if(c[i] == ' ') {
				answer += c[i];
				swit = true;
			}
			else {
				if(swit == true) {
					answer += (char)(c[i]-32);
					swit = false;
				}
				else {
					answer += (char)(c[i]);
					swit = false;
				}
			}
		}
		
		return answer;
	}
}

[ 벨로그 작성하면서 더 간단히 할 수 있을 거 같아서 다시 작성 해본 코드]

class Solution {
    public String solution(String s) {
    	
    	StringBuilder sb = new StringBuilder();
    	
        String answer = "";
        String[] strArr = s.toLowerCase().split("");
        boolean swit = true;
        
        for(String w : strArr) {
        	if(swit == true) {
        		sb.append(w.toUpperCase());
        		swit = false;
        	}
        	else if(swit == false){
        		sb.append(w);
        	}
        	if(w.equals(" ")) {
        		swit = true;
        	}
        }
        return answer = sb.toString();
    }
}

6. Growth 🍄

여러 알고리즘을 풀고 벨로그에 정리를 하려고하니 이전에 풀었던 코드보다 간결하게 표현 할 수 있을 거 같아 다시 풀어 보았다.

StringBuilder의 개념을 배우고 String을 계속 호출하면서 값을 변경하는 시간을 단축 시켰으며 코드 또한 더 간결하게 작성해 보았다.
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글