Algorithm | 이상한 문자 만들기

권기현·2021년 5월 7일
0

Algorithm

목록 보기
18/20

문제 설명

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

제한 조건

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

예시

nresult
"try hello world""TrY HeLlO WoRlD"

입출력 예 설명

"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.


📍1차 시도

function solution(s) {
    let answer = '';
    let sArr = s.split(' ');
    for(let i=0; i<sArr.length; i++){
      let stringArr = sArr[i].split('');
      for(let j=0; j<stringArr.length; j++){
        if(j%2 === 0) stringArr[j] = stringArr[j].toUpperCase() ;
        
        if(j === stringArr.length-1){
          answer = answer + stringArr.join('');
        }
      }
      if(i !== sArr.length-1 )answer = answer + ' ';
    }
    return answer;
}


문제설명에는 "문자열 s는 한 개 이상의 단어로 구성되어 있습니다." 라고 되어있었다.
이 말인 즉, s가 "try hello world" 일 수도 있고, "TRY HELLO WORLD"일 수도 있다는 것이다.

즉, 짝수번째 문자를 대문자로 변경하는 로직 뿐 아니라 홀수번째 문자를 소문자로 바꿔주는 로직 또한 필요하다는 것이다.

📍2차 시도

function solution(s) {
    let answer = '';
    let sArr = s.split(' ');
    for(let i=0; i<sArr.length; i++){
      let stringArr = sArr[i].split('');
      for(let j=0; j<stringArr.length; j++){
        if(j%2 === 0){
         stringArr[j] = stringArr[j].toUpperCase() ;
        }else{
         stringArr[j] = stringArr[j].toLowerCase() ; // 홀수 -> 소문자
        }
        if(j === stringArr.length-1){
          answer = answer + stringArr.join('');
        }
      }
      if(i !== sArr.length-1 )answer = answer + ' ';
    }
    return answer;
}

✅ 반성할 점.

입출력 예를 보고 풀이를 단정짓지말고 주어진 문제와 제한사항을 토대로 문제를 풀어야겠다.


📍나의 다른 풀이.

function solution(s) {
    let answer = s.split(' ').map( word => {
      let newWord = '';
      for(let i = 0; i<word.length; i++){
        i%2 ? newWord+= word[i].toLowerCase() : newWord+= word[i].toUpperCase();
      }
      return newWord;
    }).join(' ')
    
    return answer;
}
profile
함께 일하고 싶은 개발자를 목표로 매일을 노력하고, 옷을 좋아하는 권기현 입니다.

0개의 댓글