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

min·2024년 8월 22일
0

📁 알고리즘

목록 보기
2/2

🍀 문제

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

🍀 풀이

1차

📌 아이디어

  1. 전체 문자열을 소문자로 바꾼다.
  2. 띄어쓰기를 기준으로 split 한다.
  3. 띄어쓰기 별 배열을 돌면서 첫번째 문자는 대문자로 바꾸고, 나머지는 정답으로 붙인다.

📌 코드

public class Solution {
    public String solution(String s) {
        s = s.toLowerCase();

        String answer = "";

        String[] words = s.split(" ");
        for (int i = 0; i < words.length; i++) {
            String word = words[i];
            answer += word.substring(0, 1).toUpperCase();
            answer += word.substring(1, word.length());

            if (i != words.length - 1) {
                answer += " ";
            }
        }
        return answer;
    }
}

📌 결과

런타임 에러 발생
44.0/100

프로그래머스에서 제공한 기본 테스트 케이스는 통과했으나 제출하니 런타임 에러가 엄청나게 발생했다.

이유가 뭔가 했더니 공백이 연달아 2개가 나오는 경우, 앞뒤로 공백이 존재하는 경우에 대한 테스트 케이스에서 실패 했다.

2차

📌 아이디어

1번에 대한 해결을 위해서 split(" ", -1) 메소드를 통해 뒤 공백에 대한 문제는 해결하였다.

하지만 결국 split(" ")을 사용하면 중간에 공백이 2번 이상 들어오는 경우 때문에 문제가 생길 수 밖에 없었다.

  • substring() 사용하면서 에러가 발생하기 때문

공백 뒤는 무조건 대문자다 라는 결론으로 아래와 같이 풀이하고 통과함.

public class Solution {
    public String solution(String s) {
        s = s.toLowerCase();

        String answer = "";

        String[] words = s.split("");
        for (int i = 0; i < words.length; i++) {
            if (i == 0 || " ".equals(words[i-1])) {
                answer += words[i].toUpperCase();
            }
            else
            {
                answer += words[i];
            }
        }

        return answer;
    }
}

TIL

📕 정리

Split 특징
1. split()은 맨 앞과 맨 뒤에 있는 구분자에 대해서는 구분하지 않는다.
2. 구분자가 연속되었다면 1번만 구분한다.

🍀 다른 사람 코드 참고

flag 통해서 정리된 코드 보니 더 간결하고 좋아보였다.

profile
기록으로 기억하기

0개의 댓글