티스토리 뷰

문제

코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

코드

function solution(s) {
  let numArr = [
    ['zero', '0'],['one', '1'], ['two', '2'], ['three', '3'],
    ['four', '4'], ['five', '5'], ['six', '6'], ['seven', '7'],
    ['eight', '8'], ['nine', '9']
  ];
  for (let x of numArr) {
    s = s.split(x[0]).join(x[1]);
  }
  return Number(s);
}

// solution("one4seveneight"); // 1478
solution("oneone2twotwo3threefour") //11222334

 

풀이

문자열을 split과 join 메서드를 이용해서 답을 내야겠다는 생각을 했다.

그럼 zero와 0, one과 1 ... nine과 9를 한 변수에 만들어 놓고 반복문을 돌려서 문자열을 원하는대로 완성시켰다.

 

다른 풀이방법

정규표현식 사용

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

 

느낀점

처음엔 replaceAll 메서드로 문제를 풀려고 시도했으나, 계속 런타임 에러가 났다.

왜 그런가 찾아보니 프로그래머스는 replaceAll 메서드를 지원하지 않는다고 한다.. (헐..)

그래서 다른 방법을 찾아보다가 split과 join메서드를 쓰게 되었다.

이 방법이 문자열을 조작하는데 수월하다는 것을 알게되었다.

물론 정규표현식을 쓰면 좋겠지만, 정규표현식 없이 문제를 풀고싶었다.

기회가 된다면 정규 표현식을 제대로 공부해보고 싶다.

댓글
다크모드
Document description javascript psychology
더보기 ,제목1 태그 호버