문제 설명 [요약]
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
'Challenge' 카테고리의 다른 글
[프로그래머스] 올바른 괄호 / Java (1) | 2024.01.28 |
---|---|
[프로그래머스] 보호소에서 중성화한 동물 / Oracle (0) | 2023.07.15 |
[합격] 제 44회 SQLD 시험 후기(관련 학과 졸업) (0) | 2022.05.16 |
[서류 합, 필기 탈] 2022년 IBK 기업은행 디지털 후기(서류, 필기) (0) | 2022.05.13 |