will come true

[프로그래머스/Level2] JadenCase 문자열 만들기 본문

Algorithm

[프로그래머스/Level2] JadenCase 문자열 만들기

haehyun 2022. 1. 12. 17:03

문제

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

 

코딩테스트 연습 - JadenCase 문자열 만들기

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건

programmers.co.kr

 

풀이

문장은 문자와 공백만으로만 이루어져있댔으나, 첫 문자가 숫자일 수 있고 공백이 연속으로 여러 개 있을 수도 있음. split("") 과 같이 문자열을 분리하면 "The   tree" 와 같은 문자열은 {"T", "h", "e", " ", " ", " ", "t", "r", "e", "e"} 와 같은 String배열을 반환하고, split(" ")와 같이 공백을 기준으로 분리하면 {"The", " ", " ", " tree"} 와 같은 String배열이 반환된다.

  1. 전체 문자열을 소문자로 변환한다.
  2. 각 문자열의 문자를 하나씩 체크한 뒤, StringBuffer에 추가한다.
    1. 공백일 경우  => 그대로 추가, 이 뒤에 나오는 공백이 아닌 문자는 첫 번째 문자이다.
    2. 첫 번째 문자일 경우  => 대문자 변환 추가, 이 뒤에 나오는 문자는 첫번째 문자가 아니다.
    3. 첫 번째 문자가 아닐 경우 => 그대로 추가
  3. StringBuffer를 String타입으로 반환한다.

 

코드

1. toCharArray() 메서드로 char타입으로 분리하는 방법

class Solution {
    public String solution(String s) {
        StringBuffer sb = new StringBuffer();	// JadenCase 결과 문자열
        boolean isFirst = true;     // 첫번째 문자 여부
        
        s = s.toLowerCase();        // 전체 소문자 변환
        
        for (char ch : s.toCharArray()) {
            if (ch == ' ') {
                isFirst = true;
            } else if (isFirst) {
                ch = Character.toUpperCase(ch);		// 대문자 변환
                isFirst = false;
            }
            
            sb.append(ch);		// 문자 추가
        }

        return sb.toString();
    }
}

 

2. split() 메서드로 String타입으로 분리하는 방법

class Solution {
    public String solution(String s) {
        StringBuffer sb = new StringBuffer();
        boolean isFirst = true;

        String[] arr = s.toLowerCase().split("");

        for (String str : arr) {
            sb.append(isFirst ? str.toUpperCase() : str);
            isFirst = str.equals(" ") ? true : false;
        }

        return sb.toString();
    }
}
Comments