본문 바로가기

생각정리/코딩테스트

[JAVA][Level2]PROGRAMMERS JadenCase 문자열 만들기

 

JadenCase 문자열 만들기


문제 설명

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"

입출력 예 설명

 

주어진 문제

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

나의 문제풀이

class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder();
        // 전체를 소문자로 변경하여 배열로 만듬
        String[] str = s.toLowerCase().split(" ");

        // 끊어진 문자열을 순환하면서 앞지리를 대문자로 만들고 나머지 문자와 공백을 넣어줌
        for (String string : str) {
            if (string.equals("")) answer.append(" ");
            if (!string.equals("")) answer.append(string.substring(0, 1).toUpperCase() + string.substring(1, string.length()) + " ");
        }

        // 마지막 문자열에서 공백이 들어가므로 마지막 공백은 삭제
        if (answer.length() > s.length()) answer.deleteCharAt(answer.lastIndexOf(" "));
        // 문자열 끝나고 공백일 경우 공백 추가
        if (s.length() > answer.length()) answer.append(" ".repeat(s.length() - answer.length()));
        return answer.toString();
    }
}
  • 문자열을 전부 소문자로 만들고 공백을 기준으로 문자열을 잘라서 문자열 배열을 만든다.
  • 문자열 배열을 순환하면서 잘린 문자열의 첫글자를 대문자로 만들고 나머지 문자와 공백을 붙여준다. (toUpperCase는 숫자는 어차피 적용이 안된다.)
  • 문자사이의 공백이 1개 이상일 경우를 대비하여 문자열 사이에 잘린 빈문자열이 있을경우 공백을 추가해준다.
  • 주어진 s문자열의 길이와 수정한 문자열의 길이를 비교하여 문자열을 수정한다.
    • 수정한 문자열이 클 경우, 문자열을 추가할 때 마지막에 공백이 추가된 경우로 마지막 공백은 삭제를 해준다.
    • 수정한 문자열이 작을 경우, 문자열뒤에 1개이상의 공백으로 끝났을 때 문자열 끝의 공백들은 다 삭제처리가 되어 부족한 공백 수 만큼 추가해준다. 

추가한 반례

s return
"f   " "F   "
"f  f" "F  F"
" " " "
문자열을 처음에 배열로 만들 때 공백으로 자르다 보니 문자열 뒤에 공백들은 전부 사라지는 걸 모르고 공백으로 잘려있는 줄 알고 for문에서 수정을 해보다가 디버그를 돌려보니 공백들은 그냥 사라진다는 걸 알았다.
문자열을 가지고 푸는 문제일 수 록 다른 사람들을 풀이를 보니 각자의 취향대로 구현이 되어있는 것 같다.
특히나 공백으로 문자열이 띄어 저있으면 공백을 기준으로 자를 생각만 계속 했었는데 문자열을 다 달라서 공백을 통해 맨앞 자리를 구분한다던가 정규식을 통해서 풀 수 있는게 인상적이였다.

 

 

문제 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/12951#