QA & Engineering Blog

A Blog about Quality · Automation · Engineering

🏠 홈으로

12951. JadenCase 문자열 만들기

업데이트 시간 : 2023-12-09 03:05:53 +0000

[level 2] JadenCase 문자열 만들기 - 12951

문제 링크

성능 요약

메모리: 76.1 MB, 시간: 1.20 ms

구분

코딩테스트 연습 > 연습문제

채점결과

정확성: 100.0
합계: 100.0 / 100.0

제출 일자

2023년 12월 6일 12:5:52

문제 설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건
  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
    • 숫자는 단어의 첫 문자로만 나옵니다.
    • 숫자로만 이루어진 단어는 없습니다.
    • 공백문자가 연속해서 나올 수 있습니다.
입출력 예
s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

※ 공지 - 2022년 1월 14일 제한 조건과 테스트 케이스가 추가되었습니다.

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

💡 Solutions

📄 JadenCase 문자열 만들기.java

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

        String[] words = s.toLowerCase().split("");
        Boolean flag = true;
            
        for(String word : words){
            answer += (flag) ? word.toUpperCase() : word;
            flag = (word.equals(" ")) ? true : false;
        }
        
        return answer;
    }
}
// 왜 계속 실패했습니다가 나오나 했었는데, " " 공백이 중복으로 나오는걸 고려를 안했어서
String[] words = s.toLowerCase().split(" "); // 이런식으로 작업을 했던게 문제가 되었었다.


// 아래는 그 전에 정 안되겠어서 스트링 빌더를 활용해 만들었던 것 
-- 효율은 이게  좋게나옴, 
    1. Character로 탐색을 하는 것으로 인한 한번만 순회하는 , 
    2. split으로 분리하지 않으므로 메모리소모  추가작업을 안하는 
     두가지가 크다고 생각함
class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder();

        // 첫 글자를 대문자로 시작하기 위해 'true'로 설정
        boolean isNewWord = true;

        for (char ch : s.toCharArray()) {
            if (ch == ' ') {
                isNewWord = true;
                answer.append(ch);
            } else {
                if (isNewWord) {
                    answer.append(Character.toUpperCase(ch));
                    isNewWord = false;
                } else {
                    answer.append(Character.toLowerCase(ch));
                }
            }
        }

        return answer.toString();
    }
}