문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
공백을 구분자로 하여 나누고, 각 배열마다 인덱스 짝/홀을 나누어 대/소문자로 바꿔주기.
function solution(s) {
let answer = [];
let arr = s.split(' '); //띄어쓰기를 구분자로 문자열을 나누어준다.
for(let i = 0; i < arr.length; i++){ // 그 arr의 길이만큼 반복하는 for문을 만들고
let word =''; //word라는 빈 배열을 하나 만들어준다.
for(let j = 0; j < arr[i].length; j++){ //문자열의 한 단어 별 글자 수만큼 반복
if(j % 2 === 0){ //그 길이가 짝수이면
word += arr[i][j].toUpperCase(); //word라는 배열에 그 문자의 대문자를 넣고,
}
else{ //그 길이가 홀수이면
word += arr[i][j].toLowerCase();//word라는 배열에 그 문자의 소문자를 넣는다.
}
}
answer.push(word); //answer 에 word를 push 해서 넣어주고
}
return answer; //["TrY","HeLlO","WoRlD"] 를 join 메서드를 사용하여 하나의 문자열로 합친다.
}
다시 점검하니
실행한 결괏값 ["TrY","HeLlO","WoRlD"]이 기댓값 "TrY HeLlO WoRlD"과 다릅니다.
라고 오류가 난 것을 확인했다.
배열에서 변환하지 않고 그대로 리턴한 것이 오답인 이유
function solution(s) {
var answer = [];
let arr = s.split(' ');
for (let i = 0; i < arr.length; i++) {
let word = '';
for (let j = 0; j < arr[i].length; j++) {
if (j % 2 == 0) word += arr[i][j].toUpperCase();
else word += arr[i][j].toLowerCase();
}
answer.push(word);
}
return String(answer.join(' '));
}
function toWeirdCase(s){
var result = "";
for(var word of s.split(" ")) {
for(var i in word) {
result += word[i][parseInt(i) % 2 == 0 ? "toUpperCase" : "toLowerCase"]();
}
result += " ";
};
return result.slice(0, -1);
}
function toWeirdCase(s){
return s.toUpperCase().replace(/(\w)(\w)/g, function(a){return a[0].toUpperCase()+a[1].toLowerCase();})
}
join
toUpperCase()
toLowerCase()
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12930