문제설명
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.util.Arrays;
class Solution {
public String solution(String s) {
String[] list = s.split(" ");
for (int i = 0; i < list.length; i++) {
if (!list[i].isEmpty() && Character.isDigit(list[i].charAt(0))) {
list[i] = list[i].toLowerCase();
} else if (!list[i].isEmpty()) {
list[i] = list[i].substring(0, 1).toUpperCase() + list[i].substring(1).toLowerCase();
}
}
return String.join(" ", list);
}
}
케이스 하나가 실패뜸,, 왜지,, ? ㅠ
지피티한테 물어봤더니 아래처럼 수정해줬다
class Solution {
public String solution(String s) {
String[] words = s.split(" ", -1);
StringBuilder result = new StringBuilder();
for (int i = 0; i < words.length; i++) {
if (!words[i].isEmpty()) {
char firstChar = words[i].charAt(0);
if (Character.isLetter(firstChar)) {
words[i] = Character.toUpperCase(firstChar) + words[i].substring(1).toLowerCase();
} else {
words[i] = firstChar + words[i].substring(1).toLowerCase();
}
}
result.append(words[i]);
if (i < words.length - 1) result.append(" ");
}
return result.toString();
}
}
수정된 것
- split(" ", -1)을 사용하여 연속된 공백도 유지.
- String.join()을 호출하여 배열을 다시 문자열로 변환한 것 보다 StringBuilder를 사용하여 직접 문자열을 조합한 것이 더 효율적임
- 단어 뒤에 직접 " "(공백)를 추가하여 원래 공백 개수를 유지.
반응형
'Chapter02 > 코딩테스트' 카테고리의 다른 글
[ 코딩테스트 ] 프로그래머스 Lv2. 짝지어 제거하기 (0) | 2025.03.05 |
---|---|
[ 코딩테스트 ] 프로그래머스 Lv2.올바른 괄호 (0) | 2025.03.02 |
[ 고딩데스드 ] 프로그래머스 Lv2.최솟값만들기 (0) | 2025.02.28 |
[ 고딩데스드 ] 프로그래머스 Lv2.최댓값과 최솟값 (2) | 2025.02.27 |
[ 고딩데스드 ] 서울에서 김서방 찾기 (0) | 2024.10.08 |