본문 바로가기
코딩테스트/자바 Level 2

[Java] JadenCase 문자열 만들기

by onggury 2023. 8. 28.

문제

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)

 

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

 

 

제한사항

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

 

class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder();

        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if(i == 0 || s.charAt(i-1) == ' ' && Character.isLowerCase(ch)) {
                ch = Character.toUpperCase(ch);
            }
            else if(s.charAt(i-1) != ' ' && Character.isUpperCase(ch)) {
                ch = Character.toLowerCase(ch);
            }
            answer.append(ch);
        }

        return answer.toString();
    }
}

문자열의 문자를 하나씩 가져와서 첫 글자이거나 이전 글자가 공백이며 현재 글자가 소문자라면 대문자로 교체 후 StringBuilder에 append 하는 방식이다.

 

결과는 아래와 같다.

 

그리고 아래 코드는 다른사람풀이를 보다가 너무 좋은 아이디어여서 이해한 후 다시 구현해본 방법이다.

class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder();
        String[] strArr = s.toLowerCase().split("");
        boolean blank = true;
        
        for(String str : strArr) {
            answer.append((blank) ? str.toUpperCase() : str);
            blank = str.equals(" ");
        }
        
        return answer.toString();
    }
}

그리고 결과는 아래와 같다.

가독성은 당연히 두번째 코드가 좋지만 생각보다 시간이 좀 더 걸린 것 같은데, 아마 문자열을 배열로 만드는 과정과 문자열을 매번 공백인지 비교하는 과정에서 시간이 좀 더 걸린 게 아닌가 싶다.

물론 두 번째 코드가 효율이 더 안좋다고 단정지을 수 없는건 사실이다. 그냥 다방면에서 생각해본다면 그렇다는 얘기일뿐.

(사실 전체적으로 본다면 두 번째 코드가 더 좋은 코드일 것이라 생각한다)

 

 

출처

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