programmers 코딩테스트 : 이상한 문자 만들기

H·2022년 5월 12일
0

Coding Test

목록 보기
14/26

🔔 이상한 문자 만들기

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

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


🔠 첫번째 통과한 코드

 const s = "try hello world";

function solution(s) {
    let answer = "";
    const words = s.split(" "); // 문자열 > 배열로  단어들을 띄어쓰기를 기준으로 배열로 만들기
    let arr = [];
    for (let i = 0; i < words.length; i++) {
        const word = Array.from(words[i]); //단어를 쪼개서 담는 배열이 필요하지 이건 데이터가 변하지 않을때니까 const
        let convertWord = ""; // 하단에서 바뀌는 단어를 담는 곳
        let convertSpellingArray = [];
        for (let j = 0; j < word.length; j++) {
            let spelling = word[j];
            let convertSpelling =
                j % 2 === 0 ? spelling.toUpperCase() : spelling.toLowerCase();
            convertSpellingArray.push(convertSpelling);
        }
        convertWord = convertSpellingArray.join("");
        arr.push(convertWord);
    }
    answer = arr.join(" ");
    return answer;
}

📌코드 설명

  1. 단어를 배열로 쪼갠다. ( 문장 > 단어 )
  2. 해당 단어를 또 배열로 쪼갠다.( 단어 > 글자 )
  3. 해당 배열에서 짝수 index, 홀수 index 를 찾는다
  4. 해당 인덱스의 배열 요소 대문자, 소문자로 변경한다.
  5. 모든 글자를 단어로 만든다
  6. 만들어진 단어 문자열을 모아 단어 배열을 만든다.
  7. 단어 배열을 문자열로 전환한다.
  8. return answer;

🍀 피드백

 function solution(s) {
   s.split(" ")
     .map((item) =>
          Array.from(item)
          .map((jtem, index) =>
               index % 2 == 0 ? jtem.toUpperCase() : jtem.toLowerCase()
              )
          .join("")
         )
     .join(" ");
}

📌 코드 설명

map() 으로 문장 > 단어 > 글자 순으로 변경하고 join()으로 합쳐줌
for문이랑 시간을 비교해봤을 때는 차이가 별로 없지만, 짧고 간결한건 이 코드가 맞는듯

🔠 다른 사람의 코드

function toWeirdCase2(s) {
  var result = "";
  var num = 0;

  for (var i = 0; i < s.length; i++) { 
    if (s.charAt(i) == " ") { 
      num = 0;
      result += " ";
      continue;
    } else if (num % 2 == 0) {
      result += s.charAt(i).toUpperCase();
      num++;
    } else {
      result += s.charAt(i).toLowerCase();
      num++;
    }
  }
  return result;
}

console.log(toWeirdCase2("try hello world"));

📌 chatAt()
str.charAt(index)
문자열에서 특정 인덱스에 위치하는 유니코드 단일 문자를 반환함

📌 코드 설명

  1. 문자열에 i번째가 빈 문자열 일 때 num은 0 result += " " continue;
  2. num이 짝수 일때 짝수 인덱스 글자 대문자 반복
  3. 홀수 일 때도 반복

🔠 다른 사람의 풀이

function toWeirdCase(s) {
  let result = "";

  for (let word of s.split(" ")) {
    for (let i in word) {
        result +=
            word[i][parseInt(i) % 2 === 0 ? "toUpperCase" : "toLowerCase"]();
    }
    result += " ";
  }

  return result.slice(0, -1);
}

//확인
console.log("결과 : " + toWeirdCase("try hello world"));

📌 a['toUpperCase']() : 출처 링크
result += word[i][parseInt(i) % 2 === 0 ? "toUpperCase" : "toLowerCase"]();
word[i]는 문자열이기 때문에 ["toUpperCase"]()가 조건문에 의해서 변환 실행이 된다.
정확하게 이해한건 아니지만 문자열인 경우 이렇게도 진행되는듯

profile
🤘 돌머리도 ROCK이다! 🤘

0개의 댓글