< 내 풀이 >
import java.util.*;
class Solution {
public String solution(String s) {
StringBuilder sb=new StringBuilder(s);
boolean isEmpty=false;
for(int i=0;i<s.length();i++){
if(s.charAt(i)==' '){ // 빈 문자이면
isEmpty=true;
continue;
}
else { // 빈 문자가 아니면
if(isEmpty){ // 앞에가 빈 문자였음
sb.setCharAt(i,Character.toUpperCase(s.charAt(i))); //대문자로 바꾸기
isEmpty=false;
}
else { // 앞에 빈 문자 아니였음
if(i==0) // 가장 첫번째 글자이면
sb.setCharAt(i,Character.toUpperCase(s.charAt(i))); //대문자로 바꾸기
else
sb.setCharAt(i,Character.toLowerCase(s.charAt(i))); // 소문자로 바꾸기
}
}
}
String answer=sb.toString(); // StringBuilder를 String으로 변환
return answer;
}
}
✏️ 풀이 과정
1. 빈 문자일 경우
: isEmpty의 값을 true 로 변경
2. 빈 문자가 아닐 경우
- 앞에가 빈 문자였을 경우
: 대문자로 바꾸기, isEmpty의 값을 false 로 변경
- 앞에 빈 문자가 아니였을 경우
- 맨 첫번째 글자일 경우 (앞에 공백 없었음) : 대문자로 바꾸기
- 이외의 경우: 소문자로 바꾸기
< 다른 사람의 풀이 >
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;
}
}
🔻 String[] sp = s.toLowerCase().split(""); 를 수행했을 때 sp 배열의 상태
[3, p, e, o, p, l, e, , u, n, f, o, l, l, o, w, e, d, , m, e]
✍🏻 느낀점
처음에 이 문제를 봤을 때, 되게 간단한 문제라고 생각했었는데 이 문제를 통해 배운 것이 많다.
String은 불변이기 때문에 charAt 으로 접근해서 값을 못 바꾼다는 것을 이번에 새로 알게 됐다.
그리고 char 형을 toUpperCase 또는 toLowerCase 를 하기 위해서는 Character.toUpperCase(s.charAt(i))
이렇게 해야된다는 사실도 처음 배웠다.
그동안 문제를 푸는 것에만 목적을 두고, 이러한 중요한 것들을 잘 몰랐던 것 같다. 이제라도 알게 됐으니 앞으로는
절대 잊지 않도록 기록해놔야겠다. 다른 사람들의 풀이를 보니 정말 간단하고 쉽게 푼 사람들이 많다.
위의 사람이 추천을 가장 많이 받았었는데 그럴만하다^.^ 나도 저렇게 깔끔한 코드를 작성할 수 있는 날이 오길,, 🔥
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 숫자의 표현 (1) | 2024.04.20 |
---|---|
[JAVA] 이진 변환 반복하기 (1) | 2024.04.18 |
[JAVA] 최솟값 만들기 (0) | 2024.04.17 |
[JAVA] 올바른 괄호 (0) | 2024.04.17 |
[JAVA] 붕대 감기 (0) | 2024.04.09 |