문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
내가 풀었던 오답
function solution(s) {
//단어들을 공백을 기준으로 떨어뜨려 그 단어의 인덱스가 짝수라면 대문자로 , 아니라면 소문자로 변형하여 출력
var arr = [];
//공백을 기준으로 단어를 떨어뜨리고
var stringArr = s.split(" ")
//각 떨어진 단어를 word 배열에 추가후 word를 스프레드 연산자로 하나씩 떼줌
for(let i = 0; i < stringArr.length; i++){
var word = stringArr[i];
var spliteWord = [...word];
//반복문을 이용해 떨어진 단어의 인덱스가 짝수라면 대문자 아니라면 소문자로 변경후 arr 배열에 다시 추가해줌
for (let j = 0; j<spliteWord.length; j++){
if(j % 2 === 0){
arr.push(spliteWord[j].toUpperCase())
}else if(j % 2 !== 0){
arr.push(spliteWord[j].toLowerCase())
}
}
//단어마다의 과정을 마쳤다면 공백을 다시 추가해준 후
arr.push(" ")
//trim을 이용해 필요없는 앞뒤의 공백을 없애주었음
}
return arr.join("").trim();
}
아마 뒤에 공백을 제거하겠다고 문자열로 만든 후 trim을 쓴것이 문제였던것 같다 .
수정한코드
function solution(s) {
var arr = [];
var stringArr = s.split(" ");
for (let i = 0; i < stringArr.length; i++) {
var word = stringArr[i];
var spliteWord = [...word];
for (let j = 0; j < spliteWord.length; j++) {
if (j % 2 === 0) {
arr.push(spliteWord[j].toUpperCase());
} else {
arr.push(spliteWord[j].toLowerCase());
}
}
// 각 단어 사이에 공백 추가
arr.push(" ");
}
// 마지막 공백 제거
arr.pop();
return arr.join("");
}
join을 하기전 배열의 끝부분을 제거하는 pop() 함수를 사용하니 정상적으로 테스트케이스를 통과하였다!
다른사람의 풀이
function toWeirdCase(s){
//함수를 완성해주세요
return s.toUpperCase().replace(/(\w)(\w)/g, function(a){return a[0].toUpperCase()+a[1].toLowerCase();})
}
속도는 느리지만 코드의 양이 현저히 줄어든 것이 보인다. 정말... 경이롭다
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 Lv.1 - 추억 점수 (0) | 2024.03.26 |
---|---|
[알고리즘] 프로그래머스 Lv.1 - 신고 결과 받기 (0) | 2024.03.24 |
[알고리즘]프로그래머스 Lv.1 - 시저암호 (0) | 2024.03.22 |
[알고리즘]개인정보수집 유효기간(JS) (0) | 2024.03.12 |
[알고리즘]프로그래머스 Level 1 - 소수 만들기(Js) (0) | 2024.03.08 |