[프로그래머스] 이상한 문자 만들기 in JavaScript

hyocho·2022년 6월 21일
0

코딩테스트

목록 보기
15/45
post-thumbnail

✅문제

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

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

✍문제풀이

공백을 구분자로 하여 나누고, 각 배열마다 인덱스 짝/홀을 나누어 대/소문자로 바꿔주기.

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"과 다릅니다.
라고 오류가 난 것을 확인했다.
배열에서 변환하지 않고 그대로 리턴한 것이 오답인 이유


2022년 7월 6일 수정
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();})

}

📝TIL

  • join
  • toUpperCase()
  • toLowerCase()

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12930

profile
기록하는 습관을 기르고 있습니다.

0개의 댓글