문제설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- s는 길이 1 이상 200 이하인 문자열입니다.
- s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
- 숫자는 단어의 첫 문자로만 나옵니다.
- 숫자로만 이루어진 단어는 없습니다.
- 공백문자가 연속해서 나올 수 있습니다.
입출력 예
코드 설명
String answer = "";
- 빈 문자열 answer를 초기화합니다. 이 변수는 최종 결과 문자열을 담을 용도로 사용됩니다.
String[] arr = s.split(" ");
- 주어진 문자열 s를 공백을 기준으로 split하여 단어로 분리하여 arr 배열에 저장합니다.
for(int i=0; i<arr.length; i++) {
String str = arr[i];
if(arr[i].length() == 0) {
answer += " ";
}
else {
answer += str.substring(0, 1).toUpperCase();
answer += str.substring(1, str.length()).toLowerCase();
answer += " ";
}
}
- 반복문을 사용하여 arr 배열에 저장된 단어를 하나씩 처리합니다.
- 각 단어 str의 길이가 0인 경우, 즉 공백인 경우, answer에도 공백을 추가합니다.
- 그렇지 않은 경우, 첫 글자는 대문자로 변환하여 answer에 추가하고, 나머지 글자들은 소문자로 변환하여 answer에 추가합니다.
- 각 단어의 처리가 끝날 때마다 answer에 공백을 추가하여 다음 단어와 구분합니다.
a. 만약 현재 문자열의 길이가 0이라면 (즉, 공백 문자열이라면), answer에 공백(" ")을 추가합니다.
b. 문자열의 길이가 0보다 크다면 (즉, 문자가 있다면), 첫 번째 문자를 대문자로 변경하여 answer에 추가하고, 두 번째 문자부터 마지막 문자까지를 소문자로 변경하여 answer에 추가합니다. 이후 " "을 추가하여 단어 간의 공백을 유지합니다.
맨 마지막 문자열 처리: 입력으로 주어진 문자열 s가 마지막에 공백이 있는 경우, answer를 그대로 반환합니다. 그렇지 않은 경우, answer의 마지막 공백을 제거하고 결과를 반환합니다.
if(s.substring(s.length()-1, s.length()).equals(" ")){
return answer;
}
return answer.substring(0, answer.length()-1);
- 반복문이 끝나고 난 뒤, 마지막에 추가된 공백은 결과 문자열에 포함되지 않도록, 마지막 문자가 공백인지 검사합니다.
- 만약 마지막 문자가 공백이면 원래 answer을 그대로 반환하고, 그렇지 않으면 마지막 공백을 제거한 문자열을 반환합니다.
소스코드&결과
소스 코드
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
String[] arr = s.split(" ");
for(int i=0; i<arr.length; i++) {
String str = arr[i];
if(arr[i].length() == 0) {
answer += " ";
}
else {
answer += str.substring(0, 1).toUpperCase();
answer += str.substring(1, str.length()).toLowerCase();
answer += " ";
}
}
if(s.substring(s.length()-1, s.length()).equals(" ")){
return answer;
}
return answer.substring(0, answer.length()-1);
}
}
실행 결과
다른 사람이 짠 코드
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;
}
}
위의 코드는 정말 갈끔한 코드이네요! 코드를 한 번 분석해보겠습니다.
- s 문자열을 소문자로 변환한 뒤 split("")을 통해 각 문자를 배열 sp에 저장합니다. split("")은 문자열을 문자 단위로 쪼개는 역할을 합니다.
- answer 변수를 빈 문자열로 초기화합니다. 이 변수는 결과 문자열을 담을 용도로 사용됩니다.
- flag 변수를 true로 초기화합니다. 이 변수는 대소문자 변환을 위한 플래그 역할을 합니다.
- 반복문을 사용하여 sp 배열에 저장된 문자들을 하나씩 처리합니다.
- 각 문자 ss의 값이 공백인 경우, flag를 true로 설정하여 다음 문자가 단어의 첫 글자임을 나타냅니다.
- 그렇지 않은 경우, 즉 문자가 공백이 아닌 경우, flag를 false로 설정하여 다음 문자가 단어의 첫 글자가 아님을 나타냅니다.
- flag가 true인 경우, 즉 현재 문자가 단어의 첫 글자인 경우, ss를 대문자로 변환하여 answer에 추가합니다.
- flag가 false인 경우, 즉 현재 문자가 단어의 첫 글자가 아닌 경우, ss를 그대로 answer에 추가합니다.
- 반복문이 끝나고 난 뒤, 결과 문자열 answer를 반환합니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[JavaScript] 배열의 원소 삭제하기 (2) | 2023.08.14 |
---|---|
[JavaScript] 순서 바꾸기 (2) | 2023.08.11 |
[JAVA] 로또의 최고 순위와 최저 순위 (2) | 2023.08.02 |
[JavaScript] 0 떼기 (2) | 2023.08.01 |
[JavaScript] 공백으로 구분하기 2 (2) | 2023.07.30 |