숫자 문자열과 영단어

.·2021년 8월 9일
0

알고리즘

목록 보기
13/21
function solution(s) {
    s = s.replace(/zero/gi, 0)
    .replace(/one/gi, 1)
    .replace(/two/gi, 2)
    .replace(/three/gi, 3)
    .replace(/four/gi, 4)
    .replace(/five/gi, 5)
    .replace(/six/gi, 6)
    .replace(/seven/gi, 7)
    .replace(/eight/gi, 8)
    .replace(/nine/gi, 9)
    return parseInt(s);
}

어렵게 생각했는데 단순히 하나하나 replace로 체이닝 하는게 제일 간단했다

  1. g global = > 지정된 정규표현식을 여러번 찾는다는 뜻
  • one 등이 여러번 나올수 있기 때문에 꼭 global로 설정해 줘야한다
  1. i는 대소문자를 구분하지 않는다는 것인데 문제에서 꼭 필수는 아니지만 좀 더 범위를 늘려주고 싶다면 설정해 주는게 좋다

감명받은 코드

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);
}

내장함수, index를 적절하게 사용한 정말 훌륭한 예시가 아닐까 싶다
해당 인덱스의 단어가 문자열에 있다면 제거해주고 해당 인덱스로 join을 해준다

split() 메서드

split() 메서드는 String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눕니다. - > separator마다 끊은 부분 문자열을 담은 Array.

  1. 문자열에서 separator가 등장하면 해당 부분은 삭제되고 남은 문자열이 배열로 반환됩니다.
  2. separator가 등장하지 않거나 생략되었을 경우 배열은 원본 문자열을 유일한 원소로 가집니다.
  3. separator가 빈 문자열일 경우(""), str은 문자열의 모든 문자를 원소로 가지는 배열로 변환됩니다.
  4. separator가 원본 문자열의 처음이나 끝에 등장할 경우 반환되는 배열도 빈 문자열로 시작하거나 끝납니다.
  • 그러므로 원본 문자열에 separator 하나만이 포함되어 있을 경우 빈 문자열 두 개를 원소로 가지는 배열이 반환됩니다.

문제에서의 split

  1. 만약 s가 "one2three"라고 가정하자
  2. answer에 s를 할당해준다
  3. numbers배열에 대해 for문을 도는데 i=1(numbers[1]="one")일때
    answer.split(numbers[1]) 을 하면 answer는 "one"을 기준으로 쪼개진 배열인 ["","2three"]을 return 하게 된다

join() 메서드

join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다.

() 괄호 안 = > separator (Optional)
배열의 각 요소를 구분할 문자열을 지정합니다. 이 구분자는 필요한 경우 문자열로 변환됩니다. 생략하면 배열의 요소들이 쉼표로 구분됩니다. separator가 빈 문자열이면 모든 요소들이 사이에 아무 문자도 없이 연결됩니다.

문제에서의 join()

["", 2three] 를 해당 index인 1로 join하게 되면 "12three"가 된다
join은 string을 return해서 꼭 parseInt 나 Number 사용해서 숫자로 만들어 줘야한다

index가 3일때 split(numbers[3]) 후 [12,""] = > index로 join후 "123" 이된다

  • join 이나 split을 쓸 때 seperator를 "", " ", "," 로 습관적으로 사용해서 사용법을 깊게 생각하지 않았던 것 같다
    이런 내장함수를 자유자재로 사용하는 사람들...대단해
profile
Divde & Conquer

0개의 댓글

관련 채용 정보