
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
| s | return |
| "try hello world" | "Try HeLlO WoRlD" |
문제 풀이
function solution(s) {
var answer = [];
var words = s.split(" "); // 이렇게되면 try, hello, world로 나누어짐
for(let i=0; i<words.length; i++){
var word = words[i]; // 각 단어별로
let temp = "";
for(let j=0; j<word.length; j++){ // try 안으로 진입
// 이어붙여줄 문자열 선언
temp += (j%2===0 ) ? word[j].toUpperCase() : word[j].toLowerCase();
}
answer.push(temp);
}
return answer.join(" ");
}
처음에는 그냥 전체 words 배열에서 순회를 해서 판별하는건줄 알고, 그렇게 풀었다가 아니라는걸 깨달았다..ㅎㅎ
문자열 s에서 공백을 기준으로 split(" ")을 사용해 단어 배열로 변환했다. 그리고 각 단어를 순회해, 글자 인덱스마다 대/소문자를 구분해서 처리해야 하므로 이중 for문으로 단어의 j번째 문자가 짝수면 대문자로, 홀수면 소문자로 처리하였다.
그리고 마지막에 join을 사용해 공백으로 합쳐주면 끝
다른 풀이
function solution(s) {
return s.split(" ").map(word =>[...word].map((ch, idx) =>idx % 2 === 0 ? ch.toUpperCase() : ch.toLowerCase()).join("")).join(" ");
}
이렇게 map을 이용해서 한줄로 푸는 방식도 있었다. 나도 이렇게 짧게 작성해보고 싶은데 아직은 어렵다 😭
그러다가 문득 for문이랑 map이랑 시간복잡도가 얼마나 차이날까 궁금해서 찾아봤는데 for문이 더 빠르다고 한다.
만약 map으로 풀었다가 시간초과가 나는 경우가 있다면 for문으로 풀어도 좋을 것 같다.
'CodingTest' 카테고리의 다른 글
| [프로그래머스] Lv.1 소수 만들기 - JavaScript (1) | 2025.07.06 |
|---|---|
| [프로그래머스] Lv.1 소수 찾기 - JavaScript (0) | 2025.07.05 |
| [프로그래머스] Lv.1 두 개 뽑아서 더하기 - JavaScript (0) | 2025.07.02 |
| [프로그래머스] Lv.1 정수 제곱근 판별 - JavaScript (3) | 2024.01.28 |
| [프로그래머스] Lv.1 핸드폰 번호 가리기 - JavaScript (1) | 2024.01.27 |