99클럽 코테 스터디 4일차 TIL - [프로그래머스] JadenCase 문자열 만들기 (Java)

seri·2024년 7월 25일
0

코딩테스트 챌린지

목록 보기
29/62
post-custom-banner

📌 오늘의 학습 키워드

[프로그래머스] JadenCase 문자열 만들기 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/12951

📌 공부한 내용 본인의 언어로 정리하기

문제 탐색하기

입력 : String s (1 ≤ s 문자열의 길이 ≤ 200, strings 원소는 1 이상, 100 이하인 문자열)
출력 : s를 JadenCase로 바꾼 문자열

가능한 시간복잡도

O(n)

알고리즘 선택

구현

📌 코드 설계하기

  1. split을 사용해 단어를 공백 기준으로 분할해 arr 배열을 초기화한다. 단, split의 두 번째 인자로 음수를 할당해 연속된 공백을 포함한 모든 분할 결과를 반환한다.
  2. 각 문자열 요소가 비어있지 않으면 첫 글자는 대문자로 변환하고, 나머지 글자는 소문자로 변환한다.
  3. StringBuilder를 사용해 변환된 문자열을 다시 합친다. 단, 마지막 문자열이 아니면 공백을 추가한다.
  4. 변환된 문자열을 출력한다.

📌 오늘의 회고

어떤 문제가 있었고, 나는 어떤 시도를 했는지

split(" ")만 사용해서 테스트 케이스를 통과하지 못했고, 단어가 비어있을 때의 예외를 처리하지 않아 시간이 초과됐다.

어떻게 해결했는지

split(" ", -1)을 사용해 공백을 포함해 모든 문자열을 보존하도록 했고, isEmpty()를 사용해 단어가 안비었을 때만 처리하도록 했다.

무엇을 새롭게 알았는지

String s = "a b  c";

// limit > 0
String[] result1 = s.split(" ", 2);
System.out.println(Arrays.toString(result1)); // [a, b  c]

// limit == 0
String[] result2 = s.split(" ", 0);
System.out.println(Arrays.toString(result2)); // [a, b, c]

// limit < 0
String[] result3 = s.split(" ", -1);
System.out.println(Arrays.toString(result3)); // [a, b, , c]

split 메서드는 두 번째 인자로 limit 값을 받는데, 이 값이 양수 / 0 / 음수에 따라 동작이 다르다.

  1. 양수 값 (> 0): 배열의 길이가 최대 limit 개가 되도록 문자열을 나눈다. 즉, split 메서드는 최대 limit - 1 개의 구분자를 사용하여 문자열을 나누고, 나머지 문자열은 마지막 요소로 반환한다.

  2. 0 값: 구분자에 의해 분할된 모든 문자열을 반환하되, 끝에 위치한 빈 문자열은 무시한다.

  3. 음수 값 (< 0): 구분자에 의해 분할된 모든 문자열을 반환하며, 끝에 위치한 빈 문자열도 포함한다.

내일 학습할 것은 무엇인지

구현

📌 정답 코드

import java.util.*;

class Solution {
    public String solution(String s) {
        String[] arr = s.split(" ", -1); 
        // -1 인자를 추가하여 공백을 포함한 원본 문자열 보존
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<arr.length; i++) {
        
            if (!arr[i].isEmpty()) {
            char char1 = arr[i].charAt(0);
            char1 = Character.toUpperCase(char1); //첫 글자 대문자
            arr[i] = char1 + arr[i].substring(1).toLowerCase(); //나머지 글자 소문자
            } //단어가 안비었을때만 처리
            
            sb.append(arr[i]);
            
            if (i != arr.length-1) {
                sb.append(" ");  
            } //마지막 단어가 아니면 공백 추가
        }
        return sb.toString();
    }
}
profile
꾸준히 정진하며 나아가기
post-custom-banner

0개의 댓글