한 개 이상의 단어로 구성되어 있는 문자열 s가 있다.
단어는 공백문자로 구분되어져 있고, 단어의 짝수번째(0포함)는 대문자, 홀수번째는 소문자로 바꾸어서 리턴하는 문제이다.
입출력 예
s | return |
---|---|
"try hello world" | "TrY HeLlO WoRlD" |
먼저 문자열로 되어있는 s를 배열로 만들어야 한다.(구분은 공백)
s = s.split(" ");
그 후 나온 단어의 개수(s의 length)를 for문으로 돌리고 또 하나의 단어를 배열로 바꾼 후 그 안에서 i가 2로 나눈 나머지가 0일 때는 대문자(toUpperCase()), 아닐 때는 소문자(toLowerCase())로 바꾸고 다시 문자열로 합쳐(join())주었다.
for (let i = 0; i < s.length; i++) {
s[i] = s[i].split("");
for (let j = 0; j < s[i].length; j++) {
if (j % 2 === 0) s[i][j] = s[i][j].toUpperCase();
else s[i][j] = s[i][j].toLowerCase();
}
s[i] = s[i].join("");
}
여기서 주의해야할 점은 단어를 합칠때는 join("")이지만 단어들을 합칠때는 join(" ")을 해줘야지 원래 s의 형태처럼 나올 수 있다.
for문이 s의 길이만큼 반복되는 것을 보아 내장함수를 사용할 수 있을 것처럼 보인다.
return s = s
.split(" ")
.map((item) =>
item
.split("")
.map((str, i) => (i % 2 === 0 ? str.toUpperCase() : str.toLowerCase()))
.join("")
)
.join(" ");