[알고리즘] 이상한 문자 만들기(JavaScript)

yeon·2023년 4월 10일
0

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

첫 번째 시도

function solution(s) {
    const arr = s.split(" ")
    const resultArr = [];
    
    for(let i = 0; i < arr.length; i++){
        let string = "";
        
        for(let j = 0; j < arr[i].length; j++){
            if(j % 2 === 0){
                string += arr[i][j].toUpperCase();
            }else{
                string += arr[i][j] = arr[i][j].toLowerCase();
            }
        }
        resultArr.push(string)
    }
    
    
    return resultArr.toString().replaceAll(",", " ")
}
  • toUpperCase가 반영 안됨 (기존 문자는 immutable이라 변경하지 않기 때문)

최종 풀이

function solution(s) {
    const arr = s.split(" ")
    const resultArr = [];
    
    for(let i = 0; i < arr.length; i++){
        let string = "";
        
        for(let j = 0; j < arr[i].length; j++){
            if(j % 2 === 0){
                string += arr[i][j].toUpperCase();
            }else{
                string += arr[i][j] = arr[i][j].toLowerCase();
            }
        }
        resultArr.push(string)
    }
    
    
    return resultArr.toString().replaceAll(",", " ")
}
  • 새로운 배열에 넣어서 해결

다른 사람의 풀이

function toWeirdCase(s){
  return s.split(' ')
    .map(i => 
         i.split('').map((j, key) => key % 2 === 0 ? j.toUpperCase() : j)
    	 .join('')
    )
    .join(' ')
}
  • for보다 map 사용에 더 익숙해지자 (+ for map 차이, 성능 구글링하기)
  • split()을 두 번 쓰고 거기에 map()을 돌리는 건 생각하지 못했다.
  • join() 배열의 모든 요소를 연결해 하나의 문자열로 만듦

0개의 댓글