한 걸음씩 기록하며

[프로그래머스 코딩테스트] 이상한 문자 만들기 본문

알고리즘 & 코딩테스트

[프로그래머스 코딩테스트] 이상한 문자 만들기

Haksae 2022. 1. 18. 01:27

[이상한 문자 만들기]

문제 설명 :

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

 

⛏제한 조건

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

 

📁 입출력 예시

 

👉🏻  답안

function solution(s) {
  let a = s.split(' ')
  let b = ''
  for (let i = 0; i < a.length; i++) {
    for (let j = 2; j < a[i].length+2; j++) {
      if ( j % 2 === 0 ) {
        b += a[i][j-2].toUpperCase()
      } else {
        b += a[i][j-2].toLowerCase()
      }
    }
    (i < a.length-1) ? b += ' ' : false 
  }
  return b;
}

 

📑  간단한 설명

sort로 문자열 정렬해서 배열 따로 만들고, for문으로 하나씩 불러오며 대조하는 방식을 택했다.

사실 if 문 안에 sort를 바로 넣었었는데, 런타임 오류가 나서 sort를 위로 뺐다.

지금까지 풀면서 가장 다른 사람들의 답안(함수 사용)이 궁금한 문제였다

 

💪🏻 공부하면 좋을 답안

function solution(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);
}
  • for (var word of s.split(" ") ) -> try hello 등 하나씩 구분
  • for (var i in word) -> word 하나씩 돌림
  • word[i]로 인덱스 하나씩 꺼내고 i 조건 여부에 따라 대문자 소문자로 변환
    • ["함수"]() : 이 방식으로도 함수 선언 가능
  • slice로 가장 마지막 띄어쓰기를 잘라내서 출력
Comments