본문 바로가기
Language/Java

[Programmers | Java | 연습문제 풀이] JadenCase 문자열 만들기 - Solution with toLowerCase() & StringBuilder

by ㅇ달빛천사ㅇ 2024. 6. 29.
728x90

KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기  |  Algorithm CODEKATA

🆎 JadenCase 문자열 만들기


🏷 관련 주제 : String char String Builder toLowerCase() toUpperCase()




✔️ Solution with toCharArray()

class Solution {
    public String solution(String s) {
        String answer = "";
        char pre = ' ';
        
        for (char c : s.toCharArray()) {
            if (pre == ' ' && c >= 'a' && c <= 'z') {
                answer += (char) (c - 32);
            } else if (pre != ' ' && c >= 'A' && c <= 'Z') {
                answer += (char) (c + 32);
            } else {
                answer += c;
            }
            
            pre = c;
        }
        
        return answer;
    }
}
채점 결과

✔️ Solution with String Builder ⭐

import java.lang.StringBuilder;

class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        sb.append(s.toLowerCase());
        
        for (int i = 0; i < s.length(); i++) {
            String s1 = sb.substring(i, i + 1);
            if (i == 0 || s.charAt(i - 1) == ' ') {
                sb.replace(i, i + 1, (sb.substring(i, i + 1).toUpperCase()));
            }
        }
        
        return sb.toString();
    }
}
채점 결과

Solution with toLowerCase() & String Builder ⭐

import java.lang.StringBuilder;

class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        s = s.toLowerCase();
        sb.append(s);
        char pre = ' ';
        int idx = 0;
        
        for (char c : s.toCharArray()) {
            if (pre == ' ' && c >= 'a' && c <= 'z') {
                pre = (char) (c - 32);
                sb.replace(idx, idx + 1, String.valueOf(pre));
            } else {
                pre = c;
            }
            idx++;
        }
        
        return sb.toString();
    }
}
채점 결과

💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍

📌 오늘 만난 문제 : 매개변수 sJaden Case로 변환하여 반환하시오.
Jaden Case는 각 단어의 첫 글자대문자그 외의 글자는 소문자로, 알파벳이 아닌 문자그대로 변환합니다.


처음에는 문자열.split("")하여 문자열을 비교하는 것보다
문자열.toCharArray()char로 변환후, 비교하는 것이 더 빠른 것을
99클럽 코테 문제 풀이하면서 경험한 적이 있어서
toCharArray()로 변환 후, 반복문으로 대.소문자 비교 후, 변환, 반환할 변수에 할당하여
반복문이 끝난 후, 그 변수를 반환하는 방법으로 문제를 풀었다.

하지만 코드 실행 시간이 좀 오래 걸리는 감이 있어서 다른 문제로 풀이를 시도해 보았다

문자열을 다룰 때는 StringBuilder를 이용하는 것이 좋았던 경험도 있었기 때문에
String Builder를 사용해 보기로 하였다.

문자열에서 대문자로 치환toUpperCase()
소문자로 치환toLowerCase()메서드를 사용한다.

매개변수로 받은 전체 문자열 s에서 단어의 첫글자에 해당하는 문자의 수보다
그 외의 문자의 수가 더 많을 것으로 예상되어서
문자열 ss.toLowerCase()모두 소문자로 변환 후,
append() 메서드로 String Builder sb에 문자열 s를 추가해 주었다.
그리고 반복문을 돌면서 단어의 첫글자에 해당하는 문자를 잘라
toUpperCase()대문자치환 후,
String Builder의 replace()메서드로 sb에서 단어의 첫글자를 치환한 대문자로 변경해 주었다.
반복문이 끝난 후, String Builder의 toString()메서드로
String Builder에 담긴 문자열을 반환하였다.

char형 변수는 값을 비교하기 편하고
String Builder문자열을 합치고 다루기 편하기 때문에

마지막 코드는 첫번째 코드와 두번째 코드를 섞어 보았다.
과연! 아주 약간이지만 두번째 코드보다 조금 더 빠른 코드를 작성할 수 있었다.👍

💬 무엇을 새롭게 알았는지

char형으로 문자 비교하기, 대.소문자 변환하기
String Builder로 문자열 다루기



📚 참고 자료







728x90


Top