이상한 문자만들기

peter.p·2022년 1월 10일

알고리즘

목록 보기
2/10

1차시도.

일단 짝수번째 홀수번째 글자를 어떻게 하면 대문자, 소문자로 구분할 수 있을까를 생각.

function solution(s){
  let full_s = [];
  for (let i = 0; i < s.length; i++){
    if (i%2 === 0){
      upperWord = s[i].toUpperCase();
      full_s.push(upperWord);
    } else {
      lowerWord = s[i].toLowerCase();
      full_s.push(lowerWord);
    }
  }
  return full_s
}

const s = "try hello world"
console.log(solution(s))

try hello world는 이상이 없어보인다.
하지만 다른 문장을 넣으면 틀리게 나온다. ' '도 문자로 쳐서 대, 소문자 구분을 하게 된다.


2차시도.

공백처리를 어떻게 해야할까 고민....

function solution(s){
  let full_s = [];
  for (let i = 0; i < s.length; i++){
    if (s[i] === []){
      full_s.push(s[i])
    }
    
    if (i%2 === 0){
      upperWord = s[i].toUpperCase();
      full_s.push(upperWord);
    } else {
      lowerWord = s[i].toLowerCase();
      full_s.push(lowerWord);
    }
  }
  return full_s.join('')
}

const s = "try hello world"
console.log(solution(s))

3차시도.

띄워쓰기 단위로 글자를 자르고 거기서 문자를 하나하나 대소 구분하고 for문이 끝날 때에 공백을 넣어주는 방식.

function solution(s){
  let full_s = [];
  split_s = s.split(' '); //['try', 'hello', 'world']
  for (let i = 0; i < split_s.length; i++){
    let each_word = split_s[i]
    // console.log(each_word)
    for (let j = 0; j < each_word.length; j++){
      if (j%2 === 0){
              upperWord = each_word[j].toUpperCase();
              full_s.push(upperWord);
              
            } else {
              lowerWord = each_word[j].toLowerCase();
              full_s.push(lowerWord);
            }
            
          }
          full_s.push(' ')  // 여기가 문제다 ......
  }
  return full_s.join('')
}

const s = "try hello world"
console.log(solution(s))

잘 나온 것처럼 보였으나, 문제는 마지막 world 에서 뒤에 공백이 들어간다..


4차시도.

어떻게 고민할까 하다가 full_s에서 마지막 문자를 빼주자는 결론에 도달.
마지막 것이 문자열 공백이라서 [-1] 이 되는 줄 알았는데 안됨.. 파이썬에선 했던 거 같은데..

function solution(s){
  let full_s = [];
  split_s = s.split(' '); //['try', 'hello', 'world']
  for (let i = 0; i < split_s.length; i++){
    let each_word = split_s[i]
    // console.log(each_word)
    for (let j = 0; j < each_word.length; j++){
      if (j%2 === 0){
              upperWord = each_word[j].toUpperCase();
              full_s.push(upperWord);
              
            } else {
              lowerWord = each_word[j].toLowerCase();
              full_s.push(lowerWord);
            }
            
          }
          full_s.push(' ')  // 여기가 문제다 ......
          
  }
  if (full_s.join('')[-1] === ' '){
            full_s.pop(' ');
  }
  return full_s
}

const s = "try hello world"
console.log(solution(s))

5차시도(완성).

full_s의 전체 문자갯수를 구한 후에 거기서 마지막번째 글자를 추출해서 그 글자가 ' '이면 ' '를 빼주는 방식 채택.

function solution(s){
  let full_s = [];
  split_s = s.split(' '); //['try', 'hello', 'world']
  for (let i = 0; i < split_s.length; i++){
    let each_word = split_s[i]
    // console.log(each_word)
    for (let j = 0; j < each_word.length; j++){
      if (j%2 === 0){
              upperWord = each_word[j].toUpperCase();
              full_s.push(upperWord);
              
            } else {
              lowerWord = each_word[j].toLowerCase();
              full_s.push(lowerWord);
            }
            
          }
          full_s.push(' ')  // 여기가 문제다 ......
          
  }
  // let another = full_s.join('')
  // if (another[another.length-1] === ' '){
  //           full_s.pop(' ');
  if (full_s.join('')[full_s.join('').length-1] === ' '){
            full_s.pop(' ');

  }
  return full_s
}

const s = "try hello world"
console.log(solution(s))

완성본 추가수정.

아래는 어차피 마지막 글자는 뭐가 되었던 간에 ' ' 일 것이 뻔하기때문에 true로 두고 바로 ' ' 빼내는 방식 사용.

function solution(s){
  let full_s = [];
  let split_s = s.split(' '); //['try', 'hello', 'world']
  for (let i = 0; i < split_s.length; i++){
    let each_word = split_s[i]
    // console.log(each_word)
    for (let j = 0; j < each_word.length; j++){
      if (j%2 === 0){
             const upperWord = each_word[j].toUpperCase();
              full_s.push(upperWord);
              
            } else {
              const lowerWord = each_word[j].toLowerCase();
              full_s.push(lowerWord);
            }
            
          }
          full_s.push(' ')  // 여기가 문제다 ......
          
  }
  if (true){
            full_s.pop(' ');
  }
  return full_s.join('')
}
profile
꼭 웹 퍼플리셔가 될거에요

0개의 댓글