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메서드를 쓰게 되었다.
이 방법이 문자열을 조작하는데 수월하다는 것을 알게되었다.
물론 정규표현식을 쓰면 좋겠지만, 정규표현식 없이 문제를 풀고싶었다.
기회가 된다면 정규 표현식을 제대로 공부해보고 싶다.