Lv. 1 - 이상한 문자 만들기
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s | return |
---|---|
“try hello world” | “TrY HeLlO WoRlD” |
입출력 예 설명
“try hello world”는 세 단어 “try”, “hello”, “world”로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 “TrY”, “HeLlO”, “WoRlD”입니다. 따라서 “TrY HeLlO WoRlD” 를 리턴합니다.
문제 풀이
const solution = (s) => {
return s
.split(" ") // 공백을 기준으로 단어를 나눠줌
.map((word) =>
word
.split("") // 단어를 문자 배열로 나눔
.map((t, idx) => (idx % 2 === 0 ? t.toUpperCase() : t.toLowerCase()))
.join("")
)
.join(" "); // 단어를 다시 공백으로 연결합니다.
};
console.log(solution("try hello world"));
풀이
- 먼저 매개변수로 전달받은 문자열을 공백 기준으로 나눠주기 위해
split(' ')
을 사용한다. -
map
메서드를 사용하여, try, hello, world 각 단어를 문자 배열로 나눈다. - 이후에 map 메서드를 사용하여, 짝수의 경우 대문자로 변경해주고 홀수일 경우 소문자로 변경해준다.
-
join
을 사용하여 다시 단어를 공백으로 연결한다.
다른 사람의 풀이 참고
/(\w)(\w)/g
= 두 개의 연속된 문자(단어 문자)
function toWeirdCase(s) {
//함수를 완성해주세요
return s.toUpperCase().replace(/(\w)(\w)/g, function (a) {
return a[0].toUpperCase() + a[1].toLowerCase();
});
}
링크
- 문제 링크: 문제 링크
- Git: rarrit github
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges