문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/81301
function solution(s) {
const table = {
'zero' : '0',
'one' : '1',
'two' : '2',
'three' : '3',
'four' : '4',
'five' : '5',
'six' : '6',
'seven' : '7',
'eight' : '8',
'nine' : '9'
}
for (let key in table) {
s = s.replace(new RegExp(key, 'g'), table[key]);
}
return Number(s)
}
성능: 현재 코드에서 replace 메서드가 각 키에 대해 새로운 정규식을 생성합니다. 입력 문자열 길이(s.length)가 길어지고, table의 모든 키를 대체해야 하는 상황에서 다소 느려질 수 있습니다. 이를 개선하기 위해 한 번의 replace 호출로 여러 키를 처리하는 방법도 고려해 볼 수 있습니다.
예를 들어, new RegExp(Object.keys(table).join('|'), 'g')
와 같은 정규식을 생성하여 replace 콜백 함수 내에서 table의 값을 가져오는 방식으로 한 번에 대체가 가능합니다.
최적화된 코드 예시
function solution(s) {
const table = {
'zero' : '0', 'one' : '1', 'two' : '2', 'three' : '3', 'four' : '4',
'five' : '5', 'six' : '6', 'seven' : '7', 'eight' : '8', 'nine' : '9'
};
return Number(s.replace(new RegExp(Object.keys(table).join('|'), 'g'), match => table[match]));
}
오늘은 문자열을 통해 영단어를 숫자로 변환하는 문제를 풀며 문자열 처리 및 정규 표현식 활용을 연습했다. 객체를 사용해 매핑 데이터를 구성하고, 정규 표현식과 replace 메서드를 통해 원하는 문자열을 효율적으로 대체할 수 있었다.