Search

[99클럽 코테 스터디 13일차 TIL] 프로그래머스 - JadenCase 문자열 만들기

생성자
생성 일시
2025/04/16 06:31
카테고리
날짜
학습진행도움
99클럽
코딩테스트준비
개발자취업
항해99
TIL

프로그래머스 - JadenCase 문자열 만들기

오늘의 키워드

문자열 처리
공백 유지
Character 클래스

문제 파악 및 풀이

처음에는 s.split(" ") 방식으로 접근했는데, 공백이 연속으로 들어올 경우 split 결과에서 해당 공백이 사라지는 문제가 발생했다.
즉, 공백을 기준으로 나누면 빈 문자열은 제거되기 때문에, 원래 문자열의 형태를 복원할 수 없었다.
이로 인해 오답이 발생했고, 문제를 다시 읽어보니 공백도 그대로 유지되어야 한다는 조건이 있었다.
StringTokenizercountTokens() 메서드를 처음 알게 되어 사용해보았지만, 이 역시 공백 유지에는 적절하지 않았다.
최종적으로는 문자열을 문자 단위로 순회하면서 직접 구현하였다.

시도한 풀이 (44/100점)

import java.util.*; import java.io.*; class Solution { public String solution(String s) { String answer = ""; StringTokenizer st = new StringTokenizer(s); int len = st.countTokens(); for (int i = 0; i < len; i++) { String str = st.nextToken().toLowerCase(); String temp = ""; temp += str.charAt(0); temp = temp.toUpperCase(); temp += str.substring(1); answer += temp + " "; } return answer.trim(); } }
Java
복사
문제점: StringTokenizer는 연속된 공백을 무시하기 때문에, 공백 유지 조건을 만족하지 못함.

최종 풀이 (정답)

import java.util.*; import java.io.*; class Solution { public String solution(String s) { String answer = ""; int len = s.length(); boolean isFirst = true; for (int i = 0; i < len; i++) { char c = s.charAt(i); if (c == ' ') { isFirst = true; } else if (isFirst) { c = Character.toUpperCase(c); isFirst = false; } else { c = Character.toLowerCase(c); } answer += c; } return answer; } }
Java
복사
문자 하나하나를 직접 처리하면서 첫 문자 여부를 확인해 대소문자를 변경했다.
Character.toUpperCase()Character.toLowerCase()를 활용하여 문제 조건을 만족시켰다.

시간 복잡도

O(N)
문자열의 길이 N만큼 순회하면서 처리하므로 시간 복잡도는 O(N) 이다.

오늘의 회고

어려웠던 점

문제를 처음 읽고 문자열을 공백 기준으로 나눈 뒤 처리하는 방식이 떠올랐지만, 공백 유지 조건을 고려하지 못했다.
split()StringTokenizer의 특성을 정확히 파악하지 못해 불필요한 시행착오가 있었다.

개선점

문자열 관련 문제에서는 입출력 형식과 조건을 꼼꼼히 확인하는 습관이 중요하다는 걸 다시 느꼈다.
다양한 문자열 처리 방식(split, StringTokenizer, 문자 순회 등)에 대한 이해도를 높여야겠다.
특히 문제를 너무 빠르게 판단하지 말고, 조건을 꼼꼼히 읽자.