링크
https://school.programmers.co.kr/learn/courses/30/lessons/12951
1. 풀이
- 아래코드와 같은 풀이가 실행은되는데 런타임에러로 코드작성에 실패했다.
- 풀이설명은 코드안에 주석으로 넣어둠.
2. 처음코드
class Solution {
public String solution(String s) {
String answer = "";
// 띄어쓰기로 배열을 구분하여 나눈다.
String[] arr = s.split(" ");
//String
// 배열의 한단어씩 조회한다.
for(int i=0; i<arr.length; i++){
// 현재 단어
String now = arr[i];
// 맨앞단어 하나만 짤라서 대문자로 변경
String a = now.substring(0,1).toUpperCase();
// 맨앞단어를 제외한 나머지단어는 소문자로 변경
String b = now.substring(1,now.length()).toLowerCase();
answer += a += b += " ";
}
// 맨끝의 띄어쓰기를 삭제하기위해 넣어줌
answer = answer.substring(0, answer.length()-1);
return answer;
}
}
위의 코드는 런타임 에러로 실패한 코드입니다. 맨끝의 띄어쓰기를 삭제하기위해 넣어준 코드에서 런타임에러가 발생하지않았나 생각이든다.
3. 다시푼코드
class Solution {
public String solution(String s) {
String answer = "";
// 띄어쓰기로 배열을 구분하여 나눈다.
String[] arr = s.split(" ",-1);
// 배열의 한단어씩 조회한다.
for(int i=0; i<arr.length; i++){
// 빈 문자열인 경우는 건너뛴다.
if(arr[i].isEmpty()){
answer += " ";
continue;
}
// 맨앞단어 하나만 짤라서 대문자로 변경
String a = arr[i].substring(0,1).toUpperCase();
// 맨앞단어를 제외한 나머지단어는 소문자로 변경
String b = arr[i].substring(1).toLowerCase();
// 배열의 자리에 변경된 문자를 넣어준다.
arr[i] = a + b;
}
// answer 에 각 문자마다 띄어쓰기된 문자열로 만들어서 join 메서드로 넣어준다.
answer = String.join(" ", arr);
return answer;
}
}
빈 문자열을 처리하는 로직을 위해 isEmpty() 로 빈문자열일경우 건너뛰는 로직을 추가하였고, substring(1, arr[i].length()) 였던 코드를 substring(1) 로 변경하였다. 그리고 이건 잘 몰라서 검색하다가 알게된건데 테스트케이스 8번에서 계속 실패가떠서 찾아보니 split 함수를 사용할때(" ",-1) 을 사용하면 공백이 연속으로 여러개있는경우에도 별도의 구분자로 취급하여 분할할수있다고 그렇다길래 변경해주니까 모든 테스트케이스에서 통과했다.
'프로그래머스 코테 > 프로그래머스 Lv. 2' 카테고리의 다른 글
[프로그래머스 : Java] 최솟값 만들기 (0) | 2023.09.01 |
---|---|
[프로그래머스 : Java] 피보나치 수 (피보나치 수열의 규칙) (0) | 2023.07.25 |
[프로그래머스 : Java] 올바른 괄호 (스택/큐) (0) | 2023.07.13 |
[프로그래머스 : Java] 최댓값과 최솟값 (0) | 2023.06.14 |