프로그래머스/Lv. 2

[프로그래머스 코딩테스트] JadenCase 문자열 만들기(Java)

Sigfriede 2023. 6. 13. 01:00

  문제 설명

  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"
import java.lang.StringBuilder;
class Solution {
    public String solution(String s) {
        s = s.toLowerCase();
        StringBuilder sb = new StringBuilder(s);
        boolean bool = false;
        for (int i = 0; i < s.length(); i++) {
            if (sb.charAt(i) == ' ') {
                bool = false;
            } else if (!Character.isLetter(sb.charAt(i))) {
                bool = true;
            } else if (Character.isLetter(sb.charAt(i)) && !bool) {
                sb.setCharAt(i, Character.toUpperCase(sb.charAt(i)));
                bool = true;
            } else {
                continue;
            }
        }
        String answer = sb.toString();
        return answer;
    }
}

  toLowerCase 메소드를 이용하여 문자열 s를 전부 소문자로 바꿔줍니다.

  StringBuilder를 생성하고 인자에 문자열 s를 넣습니다. StringBuilder에 문자열을 추가하는 것이 아닌, StringBuilder의 조건을 충족하는 문자를 변경하는 식으로 할 것입니다.

  boolean형 변수 bool을 생성하고 false로 초기화합니다.

  for문이 s의 길이만큼 순회합니다.

  if문에서 sb의 i번째 문자가 공백과 같다면 bool을 false로 변경합니다.

  첫 번째 else if에서 Character 클래스의 isLetter 메소드를 이용하여 sb의 i번째 문자가 알파벳으로 이루어진 문자인지 확인합니다. 만약 문자가 아니라면 bool을 true로 변경합니다.

  두 번째 else if에서 Character 클래스의 isLetter 메소드를 이용하여 sb의 i번째 문자가 알파벳으로 이루어진 문자인지 확인합니다. 만약 문자이고 bool이 false라면 i번째 문자를 setCharAt와 Character 클래스의 toUpperCase 메소드를 이용하여 대문자로 변경합니다. bool을 true로 변경합니다.

  만약 앞선 모든 조건을 충족하지 않는다면 변경할 필요가 없는 인덱스의 문자인 것입니다. 따라서 continue를 이용하여 다음 문자를 확인하도록 합니다.

  반환하기 전 toString 메소드를 이용하여 올바른 문자열을 반환하도록 합니다.

 

  문제에는 생각보다 다양한 조건이 주어지므로, 모든 조건을 충족하게끔 코드를 짜는 것이 관건이었던 문제인 것 같습니다.

  여러 개의 공백이 왔을 때 또는 첫 문자가 알파벳이 아닐 때 이어지는 알파벳은 소문자로 쓰여 있는지 등의 테스트 케이스를 통과하는지 확인해보시면 좋을 것 같습니다.