📖 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12951
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
- s는 길이 1 이상 200 이하인 문자열입니다.
- s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
- 숫자는 단어의 첫 문자로만 나옵니다.
- 숫자로만 이루어진 단어는 없습니다.
- 공백문자가 연속해서 나올 수 있습니다.
🔑 풀이
[실패 1] 런타임 에러
문자열을 자를 때 split을 사용하고, 다시 붙일 때 +를 사용하여 런타임 에러가 났다.
=> split 대신 StringTokenizer 사용, + 대신 StringBuffer의 append 사용하여 해결
[실패 2] 연속으로 나오는 공백 처리 실패
=> replace를 사용하여 공백을 ", "로 바꾸고, 마지막에 ,를 " "로 다시 바꾸어 해결
[성공]
- s를 모두 소문자로 바꾼다
- " "를 ", "로 바꾼다
- 공백을 기준으로 자른 후 각 단어의 첫글자가 알파벳일 경우 대문자로 바꿔 더한다.
- 알파벳이 아닌 경우는 그냥 더한다
- ","를 " "로 바꿔 return
import java.util.StringTokenizer;
public class Solution {
public static String solution(String s) {
String answer = "";
// s를 소문자로 바꾸고, 공백을 쉼표공백으로 바꿈
s = s.toLowerCase();
s = s.replace(" ", ", ");
StringBuffer sb = new StringBuffer();
// s를 공백 기준으로 자르
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens()) {
String str = st.nextToken();
// 첫 글자가 알파벳(소문자)인 경우
// 대문자로 바꾸고 sb에 더해줌
if (str.charAt(0) >= 97) {
sb.append(str.substring(0, 1).toUpperCase());
sb.append(str.substring(1));
}
// 알파벳이 아닌 경우
// 그대로 sb에 더해줌
else {
sb.append(str);
}
}
answer = sb.toString();
// 쉼표를 다시 공백으로 바꿔줌
answer = answer.replace(",", " ");
return answer;
}
public static void main(String[] args) {
String s = "3people unFollowed me";
System.out.println(solution(s));
}
}
✏️ 고찰
첨에 런타임 에러 나길래 + 때문인 것 같아서(사실 조쌤이 하도 강조해서 쓸때부터 예상했지만 sb 선언하기 싫어서 무시함....) append로 바꿨는데도? 런타임 에러가 났도다... 찾아보니까 split 때문이라길래 바꿔줬더니 해결됨
substring 어케 쓰는건지 까먹어서 진짜 쓰기 싫었는데.. 게으름을 극복하고 검색해서 썼다...
검색하면 금방 나오는데 그러면 내가 하수가 된 것 같아서 검색하기 싫음.... 하지만? 검색을 잘하는 것도 실력이다....... 넘기지 말고 꼭 검색해보기
공백이 여러번 나올 수 있다는 걸 나중에 읽어서 계속 틀림
제발~ 문제 똑바로 읽거라....
'알고리즘' 카테고리의 다른 글
[프로그래머스 Lv.2] 이진 변환 반복하기.java (0) | 2023.04.09 |
---|---|
[프로그래머스 Lv.2] 올바른 괄호.java (1) | 2023.04.09 |
[프로그래머스 Lv.2] 최댓값과 최솟값.java (0) | 2023.04.06 |
[프로그래머스 Lv.2] 최솟값 만들기.java (0) | 2023.04.06 |
[프로그래머스 Lv. 2] 광물 캐기.java (0) | 2023.04.02 |