문제 및 제한사항
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
**제한사항**
s는 길이 1 이상 200 이하인 문자열입니다.
s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
- 숫자는 단어의 첫 문자로만 나옵니다.
- 숫자로만 이루어진 단어는 없습니다.
- 공백문자가 연속해서 나올 수 있습니다.
풀이 방법
예를 들어 주어진 문자열이 "3people unFollowed me" 라면 "3people Unfollowed Me"로 반환되어야 한다.
대문자와 소문자를 혼용하고 있으므로 모두 소문자로 맞춰주고, 그걸 sArry라는 배열로 만들었다.
for문으로 sArry의 요소들을 순회할 때, 해당 인덱스가 공백이면서 그 다음 인덱스가 존재한다면 그 다음 인덱스를 대문자로 만들었다.
즉 앞이 공백이므로 그 다음 인덱스는 첫 번째 문자가 되기 때문이다. 그 대문자인 인덱스를 upper라고 선언한 후, sArry에 바꿔 넣어준다.
또 i가 0일 때 (문장의 첫 단어) 이거나 해당 인덱스보다 앞이 공백이라면 똑같이 대문자로 만들어주고 바꿔 넣어준다.
여기서 맨 처음에 계속 오류가 났던 부분은, sArry[i+1] 의 존재 여부 체크였다.
sArry[i+1]이 존재하지 않는다면 upper, splice 부분에서 오류가 나기 때문에 이 값이 있는 값인지를 체크해줘야 한다.
근데 이런 식으로 계속 코드를 덧붙이는 형태는 가독성에서도 알고리즘을 고려했을 때에도 좋지 않다고 한다.
function solution(s) {
var answer = '';
for (let i = 0; i < s.length; i++) {
if (i === 0 || s[i-1] === " ") {
answer += s[i].toUpperCase();
} else {
answer += s[i].toLowerCase();
}
}
return answer;
}
나와 비슷한 듯 다른 다른 분의 풀이
문장의 첫 문자거나 인덱스의 앞에 공백이라면 해당되는 인덱스는 대문자로, 그렇지 않으면 소문자로 변환해 더해줬다.
이런 방식도 있군...
코드
function solution(s) {
let sLower = s.toLowerCase()
let sArry = Array.from(sLower)
for (let i = 0; i < sArry.length; i++) {
if (sArry[i] === ' ' && sArry[i+1]) {
let upper = sArry[i+1].toUpperCase()
sArry.splice(i+1, 1, upper)
} else if (i === 0 || sArry[i-1] === ' ') {
let upper = sArry[i].toUpperCase()
sArry.splice(i, 1, upper)
}
} return sArry.join('')
}
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 최솟값 만들기 (0) | 2023.04.09 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 올바른 괄호 (0) | 2023.04.09 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 최댓값과 최솟값 (0) | 2023.04.08 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 문자열 내림차순으로 배치하기 (0) | 2023.04.08 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 내적 (0) | 2023.04.08 |