본문 바로가기
코딩테스트/프로그래머스 0단계 - 입문

프로그래머스 0단계 - Day12 문자열, 정렬, 사칙연산, 수학

by 학습하는 청년 2024. 3. 19.

모음 제거

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000
function solution(my_string) {
  let answer = '';
  const vowels = ['a', 'e', 'i', 'o', 'u'];
  for(let i = 0; i < my_string.length; i++) {
    const item = my_string[i];
      
    let isVowel = false;
    for(let j = 0; j < vowels.length; j++) {
      if(item === vowels[j]) {
        isVowel = true;
        break;
      }
    }
    if(isVowel) continue;
    answer += item;
  }
  return answer;
}

// 다른 사람의 풀이
function solution(my_string) {
    return my_string.replace(/[aeiou]/g, '');
}

function solution(my_string) {
  let answer = my_string.split('');
  for(let i = 0; i < answer.length; i++){
    switch(answer[i]) {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
        answer.splice(i, 1);
        i--;
        break;
    }
  }
  return answer.join('');
}

function solution(my_string) {
    return Array.from(my_string).filter(t => !['a', 'e', 'i', 'o', 'u'].includes(t)).join('');
}

 

<다른 사람의 풀이에 대한 이해>

정규표현식

 

switch문을 통한 해결

split()

 

Array.from()

filter()

includes() : 배열과 문자열에서 사용할 수 있는 메소드

join()


문자열 정렬하기 (1)

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
  • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다. - - -
function solution(my_string) {
  let answer = [];
  for(let i = 0; i < my_string.length; i++) {
    const item = Number(my_string[i]);
    if(Number.isNaN(item)) {
      continue;
    }
    answer.push(item);
  }
  return answer.sort((a,b) => a - b);
}

// 다른 사람의 풀이
function solution(my_string) {
    return my_string.match(/\d/g).sort((a, b) => a - b).map(n => Number(n));
}

 

Number() 함수를 통해, 형변환을 시켜서 주어진 문자열로 된 숫자가 있다면 숫자로 바뀐다. 그 다음 isNaN() 메소드를 사용하여 문자열의 요소들이 숫자인지 여부를 파악한다. isNaN() 메소드는 결과값을 boolean으로 반환해준다.

 

<다른 사람의 풀이에 대한 이해>

정규표현식


숨어있는 숫자의 덧셈 (1)

문자열 my_string이 매개변수로 주어집니다. my_string 안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
function solution(my_string) {
  let answer = 0;
  for(let i = 0; i < my_string.length; i++) {
    const item = Number(my_string[i]);
    if(Number.isNaN(item)) continue;
    answer += Number(item);
  }
  return answer;
}

// 다른 사람의 풀이
function solution(my_string) {
  const answer = 
    my_string.replace(/[^0-9]/g, '')
    .split('')
    .reduce((acc, curr) => acc + Number(curr), 0);
    return answer;
}

function solution(my_string) {
  let sum = 0;
  for (const ch of my_string) {
      if (!isNaN(ch)) sum += +ch;
  }
  return sum;
}

위의 문제와 거의 비슷한 성격

 

<다른 사람의 풀이에 대한 이해>

정규 분포식

 

replace()

split()

reduce()

 

for .. of 반복문


소인수분해

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

  • 2 ≤ n ≤ 10,000
function solution(n) {
  let answer = [];
  for(let i = 2; n !== 1; i++) {
    if(n % i === 0) {
      while(n % i === 0) n /= i;
      answer.push(i);
    }
  } 
  return answer;
}

 


참고 영상

https://youtu.be/OyrXJx_HdjU?si=oa1S0UCpoivlUNrL

댓글