본문 바로가기
Challenge

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

by 빈급 2023. 10. 25.


문제 설명 [요약]

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

 

제한조건

1) s는 길이 1 이상 200 이하인 문자열입니다.

2) s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.

2.1) 숫자는 단어의 첫 문자로만 나옵니다.

2.2) 숫자로만 어루어진 단어는 없습니다.

2.3) 공백문자가 연속해서 나올 수 있습니다.

 

테스트 케이스

 - 문제에서 주어진 테스트 케이스는 2개이고 나머지 4개는 제가 추가했습니다:)

 

테스트 케이스

 

실패했던 이유

1) 문제를 처음 풀 때는 연속된 공백문자는 지워야 하는 줄 알았는데 그게 아니라 그대로 문자열에 넣어줘야 했다..

2) 맨 뒤에 문자열이 올 수도 있다는 경우의 수는 생각하지 않았다.

 

고려했던 사항

1) 문자열을 이어 붙이는 거다 보니 String보다는 StringBuilder가 좋지 않을까 해서 사용

 

 

풀이

import java.util.*;
class Solution {
    public String solution(String s) {
        String answer = "";
        String[] strArr = s.split(" ", -1); //-1 추가 시 마지막 공백을 포함하여 문자열을 자름
        
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<strArr.length; i++) {
            if(strArr[i].length() > 0) {
                sb.append(strArr[i].split("")[0].toUpperCase()).append(strArr[i].substring(1).toLowerCase()).append(" ");
            } else {
                sb.append(" ");
            }
        }
        return sb.substring(0, sb.length()-1).toString(); //맨 마지막 문자열에 공백이 추가됨으로 제거
    }
}

 

 나름 고민하고 StringBuilder를 써서 해보는 거 까진 괜찮았는데.. 다른 분들의 풀이를 보고 반성했다.. 

 

 

 

보고 감탄했던 다른 사람 풀이

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;
    }
}

 처음 받은 문자열을 모두 소문자로 바꾸고 모든 문자 하나하나로 나누고.. 향상된 for문을 써서 공백을 만날 때마다 flag를 이용해서 다음 문자열만 대문자로 바꾸기..

 


 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr