코딩테스트
프로그래머스(JAVA) - level2(JadenCase 문자열 만들기 )
yeosang0508
2025. 1. 12. 23:44
문제정리
주어지는 s는 알파벳과 숫자, 공백문자로 이루어짐
모든 단어의 첫 문자 대문자, 나머지 소문자인 문자열
첫문자가 알파벳이 아닌 경우에는 이어진 알파벳 소문자로
숫자는 단어의 첫 문자로만 나온다. 공백문자 연속해서 나올 수 있다.
→ 문제 해결하는 과정에서 공백문자 연속해서 나올 수도 있다는 점.. 생각을 못함..
내가 작성한 코드
class Solution {
public String solution(String s) {
String[] str = s.split(" ");
String answer = "";
for(int i = 0; i < str.length; i++){
String[] word = str[i].split("");
String a = word[0].toUpperCase();
for(int j = 1; j < word.length; j++){
a += word[j].toLowerCase();
}
answer += a + " ";
}
answer = answer.trim();
return answer;
}
}
처음에는 위와 같이 코드를 짰는데 계속
처럼 테스트8만 실패라고 뜸... 계속 조금씩 수정해도 똑같은 결과가 나오고...
생각을 해보니 문자열 뒤에도 공백이 올 수도 있다는 걸.. 이 부분을 잊고 trim을 사용해서 다 없애버린것.. 아냐 이건 문제니깐.. 문제에서도 그런말을 없었잖아...ㅜㅜ 하긴... 오지 않는다는 말 없었으니깐.. 이래서 문제를 더 풀어보고 생각해봐야하는 것..
수정한 코드
class Solution {
public String solution(String s) {
String[] str = s.split(" ");
String answer = "";
for (int i = 0; i < str.length; i++) {
String[] word = str[i].split("");
if (str[i].equals(" ")) {
answer += " ";
continue;
}
String a = word[0].toUpperCase();
for (int j = 1; j < word.length; j++) {
a += word[j].toLowerCase();
}
answer += a + " ";
}
if(s.substring(s.length()-1, s.length()).equals(" ")){
return answer;
}
return answer.substring(0, answer.length()-1);
}
}
코드를 줄이려면 줄일 수 있을거같긴한데.. 음.. 일단 return 값을 substring으로 사용해서 문자열 마지막 length가 공백이면 answer값을 리턴
아닌 경우 answer 값 자체가 현재 s문자열(공백) 이런식으로 공백이 없어야하는데 있는 상태이니깐 원래 trim으로 풀었던걸 substring 0에서 문자열 길이 - 1로 해서 return
시간은 40분...
좀 더 생각을 깊이 했으면 좀 더 빠른 시간내로 풀 수 있었을 텐데 아쉽다