[JAVA] 프로그래머스 (Lv.2) JadenCase 문자열 만들기

AIR·2023년 9월 4일
0

링크

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


문제 설명

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

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

입출력 예제

sreturn
"3people unFollowed me""3people Unfollowed Me"
"for the last week""For The Last Week"

나의 코드

class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        //주어진 문자열을 소문자로 변환한 뒤 배열로 만든다
        String[] strings = s.toLowerCase().split(" ");

        for (int i = 0; i < strings.length; i++) {
        
        	//공백은 연속으로 나올수 있기 때문에 배열의 원소가 ""일때 반복 생략
            if (strings[i].equals("")) {
                continue;
            }
            //배열의 원소의 첫글자가 솟자일 경우도 생략
            if (Character.isDigit(strings[i].charAt(0))) {
                continue;
            }
            
            //배열의 원소의 첫 글자만 대문자로 만든다
            strings[i] = strings[i].substring(0, 1).toUpperCase()
                    + strings[i].substring(1);
        }
        
        //배열을 Stringbuilder 객체로 변환
        for (int i = 0; i < strings.length; i++) {
            sb.append(strings[i]);
            if (i != strings.length - 1) {
                sb.append(" ");
            }
        }

		//주어진 문자열의 마지막 단어가 "me  " 이런식으로 주어졌을 경우       
        //배열을 만드는 단계에서 공백을 생략했었기 때문에 예외가 발생 
        //주어진 문자열과 Stringbuilder 객체의 길이를 비교하여
        //공백을 추가해준다
        if (sb.length() < s.length()) {
            for (int i = 0; i <= s.length() - sb.length(); i++) {
                sb.append(" ");
            }
        }
        return sb.toString();
    }
}

다른 사람의 풀이

class Solution {
  public String solution(String s) {
        String answer = "";
        //주어진 문자열을 소문자로 변경한 뒤 모든 문자로 나누어 배열 생성
        String[] sp = s.toLowerCase().split("");
        boolean flag = true;

		//공백을 기준으로 첫번째 단어인지 판단하여 대문자로 변경		
        for(String ss : sp) {
            answer += flag ? ss.toUpperCase() : ss;
            flag = ss.equals(" ") ? true : false;
        }

        return answer;
  }
}

정리

문제 자체는 크게 어렵지 않았는데 마지막 단어 끝에 공백이 있을 경우를
쉽게 해결하지 못했다. 결국 아이디어는 생각해냈지만 시간이 좀 걸렸다.

놀라운건 좋아요가 높은 풀이였다..
배열을 공백으로 나누어 만든게 아니라 그냥 구분없이 만들어서
숫자, 문자, 공백 구분도 없이 그냥 공백 다음에 올 경우 그냥 대문자로 만들었다..
예전에도 숫자나 공백을 그냥 대문자 소문자로 변경해서 푼 풀이를 본거 같은데
참 대단하다..

profile
백엔드

0개의 댓글