프로그래머스 코딩 문제를 풀고 다른 사람의 풀이를 보던 중이였다
문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/81301#

아주 많은 사람의 감탄을 이끌어낸 풀이법을 보았다.
본인같은 경우는 replace로 풀었는데 (replace 사용법이 기억 안 나 찾아봤지만..)
javascript의 split과 join을 사용해서 아주 기깔난 풀이를 보니 제대로 이해하고 있어야 적재적소에 사용할 수 있겠구나 느껴 정리를 해본다.
문자열을 특정 구분자로 나누어 배열에 저장하는 메소드이다.
예시
// str변수에 'Hello World !!' 문자열을 넣어준다.
let str = 'Hello World !!';
// strArr변수에 위에서 생성했던 문자열을 특정 기호(아래 소스에서는 공백)을 기준으로 나누어 배열형태로 저장해준다.
let strArr = str.split(' ');
결과값
strArr = ['Hello', 'World', '!!'];
위 처럼 문자열을 구분자로 나누어 배열으로 만든다.
split과 반대로 배열에 담긴 모든 요소를 문자열로 합쳐준다.
예시
let arr = ['Hello', 'World', '!!'];
let str1 = a.join();
let str2 = a.join(', ');
let str3 = a.join(' + ');
let str4 = a.join('');
결과
str1 = 'Hello,World,!!' /* 구분자 생략 시 ,가 구분자*/
str2 = 'Hello, World, !!'
str3 = 'Hello + Worlde + !!'
str4 = 'HelloWorld!!'
function solution(s) {
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
var answer = s;
for(let i=0; i< numbers.length; i++) {
let arr = answer.split(numbers[i]);
answer = arr.join(i);
}
return Number(answer);
}
위 코드는 문자열을 영어로(one, two) 나타낸걸 숫자로(1, 2) 변환시켜 출력해야하는 문제인데, 마찬가지로
zero부터 nine까지 문제에 주어진 문자열 s를 영어로 구분하고 그것을 다시 숫자로 합쳐주는 것이다
예를 들어 'one4seveneight' 이란 문자열을 'one'을 기준으로 split하면
['', '4seveneight'] 이렇게 배열로 나뉘게 될 것이다.
그리고 이걸 '1'로 join하게 되면
''와 '4seveneight'를 join하는데 사이에 1을 넣고 join한다 ('14seveneight')
이런 식으로 zero~nine을 split 후 join을 반복하여 모든 영단어를 숫자로 변경 후 정수로 형변환하여 출력 해 주는 것이다.
앞으로 정규식 변환과 관련된 일이 있으면 replace 뿐만 아니라 split과 join의 콤비네이션을 적극 고려해봐야 겠다 느꼈다.
창의적인 사람들이 참 많다