티스토리 뷰

오늘 푼 5가지 문제는 숫자, 문자열 데이터를 골라내서 가공하는 문제였다.

 

[푼 문제 목록]

  1. 숨어있는 숫자의 덧셈
  2. 순서쌍의 개수
  3. 문자열안에 문자열
  4. 자릿수 더하기
  5. 모음 제거 

각각의 요소를 조작해야 할 경우, 매개변수로 들어온 값이 string일 때에는 주로 배열로 변환해서 배열 내장 메서드를 활용한다. 

 

String.prototype.split()

문자열을 한 char 단위로 쪼개고싶을 때에는 .split("") 을 해주면 된다. split(구분자) 구분자가 공백이 될수도 있고 ""아무것도 없는 따옴표를 넣어주면 apple -> a,p,p,l,e로 쪼개준다.  새배열을 반환하는 것은 아니므로 변수에 담아줘야 한다.

 

내 경우는, 숫자로 들어온 매개변수 n값을 toString()을 통해 형변환 시켜준 뒤 ... (전개 연산자)를 통해서 각 요소를 쪼갰다. 

 let answer = [...n.toString()];

Array.from()

참고로 데이터가 문자열이고 각각의 char요소로 쪼개고싶을 때는 Array.from()을 활용하면 손쉽게 쪼갤 수 있다.

console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]

Array.prototype.reduce()

reduce는 누적된 값을 반환할 때 좋다. 초기값을 설정해줄수도 있으며 생각지도 못한 부분은 만약 배열의 요소가 string값이고 number로 형변환 한 뒤, 더한 값을 return해야 한다면 앞 뒤에 Number()로 형변환 할 필요없이 초기값을 0으로 주면 acc 의 값은 숫자가 된다. cur 값만 Number로 형변환해주면 number + number 연산이 되기 때문에 두 값을 더한 값을 리턴해줄 수 있다. 글로 이해가 잘 안되기 때문에 아래의 예시를 보면 이해가 잘 될 것이다. 

 // 내 코드
 function solution(n) {
    let answer = [...n.toString()];
    return answer.map((a) => Number(a)).reduce((a, b) => a + b);
  }
  • 내 코드에서는 map을 통해서 모든 배열의 값들을 number로 형변환 해준 뒤 reduce를 사용했다. 
 // 남의 코드
 function solution(n) {
    return n
      .toString()
      .split('')
      .reduce((acc, cur) => acc + Number(cur), 0);
  }
  • 다른 풀이에서는 map을 쓰지않고 reduce내에서 cur값만 Number로 형변환해줬다.

String.prototype.replace() + 정규 표현식

function solution(my_string) {
  return my_string.replace(/a|e|i|o|u/g, '');
  // replace(/[aeiou]/g, "") 와 동일
}
  • replace는 인자로 패턴(string 혹은 정규표현식)과 대체할 값(string 혹은 function), 2개의 인자를 받는다. 
  • 나는 string에서 모음인 a,e,i,o,u를 걸러내야 했는데 정규표현식 관련 내용을 찾아보니 |가 or연산자인 것을 발견해서 위와 같이 작성했다. 
  • 타인의 코드에서는 [aeiou] 로 해결했길래 무엇인지 찾아보니 2가지 방법이 있는 거 같았다. 
  • 정규 표현식 개념 사이트 링크
 

[정규식] 핵심만 모아놓은 Cheat Sheet

예제를 통하여 정규식의 핵심적인 내용만 깊이있게 알아봅니다

chrisjune-13837.medium.com


Array.prototype.includes()  // ES6 

매개변수로 str1, str2 두 개의 string 값을 받고 str1에 str2가 포함되는 지 확인할 때 includes를 활용했다. 

특이한 점은 split()을 통해서 코드를 작성한 사람도 있었는데.. 저렇게 나눴을 때 어떤 값이 나오는 지 확인해봐야 한다.

// 남의 코드: str1에 str2가 포함되면 return 1 아니라면 2 
  function solution(str1, str2) {
    return str1.split(str2).length > 1 ? 1 : 2;
  }

다른 사람들은 search(), indexOf(), match()등을 활용했다. 내 경우는 true false값을 반환하는 직관적인 내장 메서드가 좋을 거 같아 includes를 사용했다. 

댓글