JadenCase 문자열 만들기
문제 설명
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" |
입출력 예 설명
주어진 문제
class Solution {
public String solution(String s) {
String answer = "";
return answer;
}
}
나의 문제풀이
class Solution {
public String solution(String s) {
StringBuilder answer = new StringBuilder();
// 전체를 소문자로 변경하여 배열로 만듬
String[] str = s.toLowerCase().split(" ");
// 끊어진 문자열을 순환하면서 앞지리를 대문자로 만들고 나머지 문자와 공백을 넣어줌
for (String string : str) {
if (string.equals("")) answer.append(" ");
if (!string.equals("")) answer.append(string.substring(0, 1).toUpperCase() + string.substring(1, string.length()) + " ");
}
// 마지막 문자열에서 공백이 들어가므로 마지막 공백은 삭제
if (answer.length() > s.length()) answer.deleteCharAt(answer.lastIndexOf(" "));
// 문자열 끝나고 공백일 경우 공백 추가
if (s.length() > answer.length()) answer.append(" ".repeat(s.length() - answer.length()));
return answer.toString();
}
}
- 문자열을 전부 소문자로 만들고 공백을 기준으로 문자열을 잘라서 문자열 배열을 만든다.
- 문자열 배열을 순환하면서 잘린 문자열의 첫글자를 대문자로 만들고 나머지 문자와 공백을 붙여준다. (toUpperCase는 숫자는 어차피 적용이 안된다.)
- 문자사이의 공백이 1개 이상일 경우를 대비하여 문자열 사이에 잘린 빈문자열이 있을경우 공백을 추가해준다.
- 주어진 s문자열의 길이와 수정한 문자열의 길이를 비교하여 문자열을 수정한다.
- 수정한 문자열이 클 경우, 문자열을 추가할 때 마지막에 공백이 추가된 경우로 마지막 공백은 삭제를 해준다.
- 수정한 문자열이 작을 경우, 문자열뒤에 1개이상의 공백으로 끝났을 때 문자열 끝의 공백들은 다 삭제처리가 되어 부족한 공백 수 만큼 추가해준다.
추가한 반례
s | return |
"f " | "F " |
"f f" | "F F" |
" " | " " |
문자열을 처음에 배열로 만들 때 공백으로 자르다 보니 문자열 뒤에 공백들은 전부 사라지는 걸 모르고 공백으로 잘려있는 줄 알고 for문에서 수정을 해보다가 디버그를 돌려보니 공백들은 그냥 사라진다는 걸 알았다.
문자열을 가지고 푸는 문제일 수 록 다른 사람들을 풀이를 보니 각자의 취향대로 구현이 되어있는 것 같다.
특히나 공백으로 문자열이 띄어 저있으면 공백을 기준으로 자를 생각만 계속 했었는데 문자열을 다 달라서 공백을 통해 맨앞 자리를 구분한다던가 정규식을 통해서 풀 수 있는게 인상적이였다.
문제 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/12951#
'생각정리 > 코딩테스트' 카테고리의 다른 글
[JAVA][Level2]PROGRAMMERS 더 맵게 (0) | 2023.12.06 |
---|---|
[JAVA][Level2]PROGRAMMERS 다리를 지나는 트럭 (1) | 2023.12.05 |
[JAVA][Level1]PROGRAMMERS 공원 산책 (0) | 2023.09.08 |
[JAVA][Level1]PROGRAMMERS 달리기 경주 (0) | 2023.09.06 |
[JAVA][Level1]PROGRAMMERS 개인정보 수집 유효기간 (0) | 2023.09.04 |