ALGORITHM/Programmers + α

[프로그래머스] lv1. 숫자 문자열과 영단어

Harimad 2022. 6. 6. 13:02

문제

코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 (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메서드를 쓰게 되었다.

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

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

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