https://programmers.co.kr/learn/courses/30/lessons/12951#qna
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건
- s는 길이 1 이상인 문자열입니다.
- s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
- 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫 번째 입출력 예 참고 )
문제 풀이
문제를 해석해보면 공백을 기준으로 문자를 나눈 후에 첫 문자는 대문자, 나머지는 소문자로 변환해야 하며 첫 문자가 숫자일 경우에는 패스한다.라고 생각했습니다.
공백을 기준으로 나누므로 split을 활용하는 방식으로 풀이를 시도했고, String의 연산이 많이 발생할 것 같아 StringBuilder를 사용했습니다.
이후에는 firstUpper라는 첫 문자를 대문자로 변환하는 매서드를 따로 정의하였습니다. 그리고 공백을 기준으로 나눈 문자열 배열을 순환하며 변환된 문자열을 StringBuilder의 appned 연산으로 추가하여 풀이했습니다.
이 문제에서 맨 앞의 이 코드를 제거하고 코드를 제출하면 테스트 케이스 8번이 틀리게 됩니다. 저도 이 부분은 다른 분의 질문하기 의견을 보고 파악했는데 마지막 문자를 공백으로 주는 케이스가 있어서 이 부분의 처리가 필요합니다.
if(s.substring(s.length() - 1, s.length()).equals(" ")) {
strArr[strArr.length-1] += " ";}
나의 코드
class Solution {
public String solution(String s) {
String[] strArr = s.split(" ");
if(s.substring(s.length() - 1, s.length()).equals(" ")) {
strArr[strArr.length-1] += " ";
}
StringBuilder answer = new StringBuilder();
for(int i=0; i<strArr.length; i++){
answer.append(fisrtUpper(strArr[i]));
answer.append(" ");
}
answer.setLength(answer.length() - 1);
return String.valueOf(answer);
}
public StringBuilder fisrtUpper(String str){
int idx=0;
StringBuilder stringBuilder = new StringBuilder();
for(int i=0; i<str.length(); i++){
if(Character.isDigit(str.charAt(i)) && i == 0){
stringBuilder.append(str.charAt(i));
} else if(!Character.isDigit(str.charAt(idx)) && i == 0){
stringBuilder.append(Character.toUpperCase(str.charAt(i)));
} else {
stringBuilder.append(Character.toLowerCase(str.charAt(i)));
}
}
return stringBuilder;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 - 소수 찾기 (에라토테네스의 체) (0) | 2020.08.18 |
---|---|
[정렬 뿌시기] - 버블정렬(Bubble Sort) (1) | 2020.08.13 |
프로그래머스 - 단어변환(DFS) (1) | 2020.05.31 |
프로그래머스 - 타겟넘버 (DFS, 조합 두가지 풀이) (0) | 2020.05.30 |
프로그래머스 - 네트워크(DFS/BFS 두가지 풀이 법) (0) | 2020.05.30 |