오늘의 학습 키워드
- 문자열 처리
- StringTokenizer
- Character 클래스
- 조건분기
공부한 내용 정리
오늘 풀었던 문제는 문자열에서 각 단어의 첫 문자는 대문자로, 나머지는 소문자로 변환하는 것이 목표였습니다.
다만 단순히 split(" ")을 쓰면 연속된 공백이 사라지기 때문에,
이를 해결하기 위해 StringTokenizer를 " " 공백을 포함한 토큰(true) 으로 활용했습니다.
각 토큰에서:
- 공백이면 그대로 append(" ")
- 단어이면 첫 글자를 char로 추출하고 나머지는 소문자로 변환 후
- 첫 글자가 문자면 Character.toUpperCase()로 대문자화
- 숫자거나 특수문자면 그대로 유지
로직을 거쳐 StringBuilder에 이어붙이는 방식으로 구현했습니다.
소스코드
/*
입력: 공백으로 분리되어있는 문자 길이 1~200
로직: 일단 Token으로 String 분리 (공백으로)
token의 맨 앞글자 char로 분리하고 token에서 charAt으로 0번제거
그리고 나머지를 저장해놓고 모두 소문자로 해야됨.
만약 맨앞에 숫자가 아니다.
isLetter 이면 [0]번 대문자로 해서 sb에 추가,
나머지 소문자로해서 sb에 추가
만약 먄앞에 숫자다.
그럼 그냥 sb에 first랑 나머지 sb에 추가
sb.toString으로 return
출력: 맨앞에 문자는 대문자. 나머지는 소문자
*/
import java.util.*;
class Solution {
public String solution(String s) {
StringTokenizer st = new StringTokenizer(s, " ", true);
StringBuilder sb = new StringBuilder();
while(st.hasMoreTokens()){
String token = st.nextToken();
if(token.equals(" "))
sb.append(" ");
else {
// 맨 앞글자
char first = token.charAt(0);
// 맨 앞글자 제거하고 모두 소문자로
String rest = token.substring(1).toLowerCase();
if(Character.isLetter(first)) {
sb.append(Character.toUpperCase(first))
.append(rest);
} else{
sb.append(first)
.append(rest);
}
}
}
return sb.toString();
}
}
오늘의 회고
• 어떤 문제가 있었고, 나는 어떤 시도를 했는지
처음엔 split(" ")으로 단어를 나누려 했는데, 연속된 공백이 무시되어 의도한 결과가 나오지 않았습니다.
그래서 공백 자체도 하나의 토큰으로 인식하게끔 StringTokenizer(s, " ", true)를 사용했습니다.
• 어떻게 해결했는지
공백을 포함한 토큰 처리, 문자인지 숫자인지 조건 분기를 통해 정확하게 포맷팅이 되도록 했습니다.
Character.isLetter()를 사용해 첫 글자가 알파벳인지 판단하고 그에 따라 대문자/소문자 처리를 나눴습니다.
• 무엇을 새롭게 알았는지
StringTokenizer의 세 번째 인자 "true"를 주면 구분자인 " "도 포함한 채로 토큰화된다는 걸 정확히 이해하게 되었습니다.
또한, Character 클래스가 문자에 대한 다양한 정보를 제공한다는 점에서 문자열 문제를 해결할 때 매우 유용하다는 걸 다시 느꼈습니다.
• 내일 학습할 것은 무엇인지
내일은 문자열 관련 정규표현식 문제나, 조금 더 복잡한 문자열 파싱 문제를 도전해볼 예정입니다.
'99클럽 > 6기' 카테고리의 다른 글
99클럽 코테 스터디 15일차 TIL - 리그 오브 레전설(Small) 백준 17271번 (1) | 2025.04.18 |
---|---|
99클럽 코테 스터디 14일차 TIL - 진우의 달 여행 (Small) (1) | 2025.04.17 |
99클럽 코테 스터디 12일차 TIL - 포도주 시식(백준 2156번) (0) | 2025.04.15 |
99클럽 코테 스터디 11일차 TIL - 과자 나눠주기 (0) | 2025.04.14 |
99클럽 코테 스터디 10일차 TIL - 병든 나이트 (백준 1783번) (0) | 2025.04.11 |