JadenCase 문자열 변환하기, 문제점 해결과 학습
프로그래밍을 하다 보면, 때로는 예상치 못한 문제에 부딪히곤 합니다. 오늘은 문자열을 JadenCase로 변환하는 과제를 해결하면서 겪었던 문제와 그 해결 과정에 대해 이야기해보려 합니다.
JadenCase 문자열 변환하기
문제 정의
JadenCase란 모든 단어의 첫 글자만 대문자로, 나머지 알파벳은 소문자로 쓰는 문자열 형태를 말합니다. 예를 들어, "hello world"는 JadenCase로 변환하면 "Hello World"가 됩니다. 여기에는 몇 가지 조건이 있습니다.
- 문자열은 알파벳, 숫자, 공백 문자로 이루어져 있습니다.
- 숫자는 단어의 첫 문자로만 나올 수 있습니다.
- 공백 문자는 연속해서 나올 수 있습니다.
이러한 조건을 만족하며 주어진 문자열을 JadenCase로 변환하는 solution 함수를 작성하는 것이 목표였습니다.
초기 접근 방법
처음에는 문자열을 공백 기준으로 나누어 각 단어의 첫 글자를 대문자로 변환하는 방식을 선택했습니다. 이 과정에서 각 단어를 다시 문자 배열로 나누고, 첫 글자를 대문자로 변환한 뒤 나머지 문자열과 합치는 로직을 구현했습니다.
function solution(s) {
const arr = s.split(" ");
let result = '';
for(let i of arr){
if(i.length === 0) {
result += " ";
continue;
}
result += (i[0].toUpperCase() + i.substr(1).toLowerCase()) + " ";
}
return result.trim();
}
발생한 문제점
하지만 이 방법은 연속된 공백 처리에 문제가 있었습니다. " for the what 1what " 같은 입력값에서 연속된 공백이 적절히 반영되지 않았습니다. 이는 문자열을 공백으로 나눌 때, 연속된 공백이 하나의 공백으로 처리되기 때문입니다.
해결책
문제를 해결하기 위해 문자열 전체를 소문자로 변환한 뒤, 각 문자를 순회하면서 이전 문자가 공백인 경우 현재 문자를 대문자로 변환하는 방식을 선택했습니다. 이 과정에서 문자열 앞에 임시 공백을 추가해 첫 글자가 알파벳일 때도 대문자로 변환될 수 있도록 했습니다.
function solution(s) {
const s_array = (" " + s.toLowerCase()).split("");
for (let i = 1; i < s_array.length; i++)
if (s_array[i - 1] === " " && s_array[i] !== " ")
s_array[i] = s_array[i].toUpperCase();
return s_array.join("").trim();
}
이 방식을 통해 연속된 공백도 올바르게 처리할 수 있었고, 모든 문자열 조건을 만족하는 JadenCase 변환을 성공적으로 수행할 수 있었습니다.
프로그래밍 과제를 해결하면서, 예상치 못한 문제에 부딪힐 때가 많습니다. 이럴 때 중요한 것은 문제의 원인을 정확히 파악하고, 더 나은 해결책을 찾아내는 것입니다. 이번 과제를 통해, 문자열 처리와 관련된 문제 해결 능력뿐만 아니라, 프로그래밍에 있어 유연한 사고의 중요성을 다시 한번 깨달을 수 있었습니다.
▼ 다른 코딩테스트 문제풀이 ▼
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
코딩테스트 정렬 문제 가장 큰 수 만들기, 문제 해결과 코드 리팩토링 (0) | 2024.03.23 |
---|---|
코딩테스트 최소 힙(MinHeap)을 활용한 "더 맵게" 문제 해결법 (0) | 2024.03.19 |
코딩테스트 큐(queue) 문제 - 기능개발 풀이 과정 및 코드 리팩토링 (0) | 2024.03.15 |
코딩테스트 스택(stack) 문제 - 같은 숫자는 싫어 해결 과정 (0) | 2024.03.14 |
코딩테스트 해시(hash) 문제 - 완주하지 못한 선수 문제 원리 및 풀이 (0) | 2024.03.11 |