(프로그래머스) 숫자 문자열과 영단어 풀이

hwisaac·2024년 10월 31일
0

코테TIL

목록 보기
4/20

문제 링크: 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)
}

코드 설명

  • table 객체를 사용하여 영단어와 숫자를 매핑하고, 반복문을 통해 문자열 내의 모든 영단어를 숫자로 교체하고 있습니다.
  • 정규 표현식으로 각 영단어가 여러 번 등장해도 정확히 대체할 수 있도록 처리하고 있습니다.
  • 'g' 플래그를 통해 모든 매칭을 찾아 대체하므로 전체 문자열을 커버할 수 있습니다.
  • 마지막에 Number(s)로 변환하여 숫자 값을 반환하고 있습니다.

장점

  • 가독성: table 객체에 영단어와 숫자를 매핑하여 영단어가 숫자로 교체되는 과정을 직관적으로 보여줍니다.
  • 정확한 문자열 대체: RegExp와 'g' 플래그를 사용해 모든 영단어를 한 번에 찾아 대체할 수 있어 효율적입니다.
  • 간결성: 반복문과 정규식을 통해 문제를 간결하게 해결하고 있습니다.

개선할 수 있는 부분

성능: 현재 코드에서 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]));
}

TIL (Today I Learned)

오늘은 문자열을 통해 영단어를 숫자로 변환하는 문제를 풀며 문자열 처리 및 정규 표현식 활용을 연습했다. 객체를 사용해 매핑 데이터를 구성하고, 정규 표현식과 replace 메서드를 통해 원하는 문자열을 효율적으로 대체할 수 있었다.

배운 점

  • 정규 표현식을 활용한 여러 패턴 대체: 여러 개의 키를 한 번에 정규 표현식으로 찾아 대체할 수 있다는 점을 배웠다. 이는 성능 최적화에 도움이 되며, 코드도 더 깔끔해진다.
  • 객체와 배열을 이용한 매핑의 장단점: 객체를 이용해 키-값을 매핑하여 직관적으로 데이터를 관리할 수 있었으며, 코드의 가독성도 높아졌다.
  • 성능 개선의 필요성: 성능을 고려하여 반복적인 정규 표현식 생성 대신, 한 번의 replace 메서드로 해결할 수 있는 방법을 찾는 것이 중요하다는 것을 알았다.
  • 이번 문제를 통해 JavaScript에서 문자열 처리 및 정규 표현식 사용의 기본과 성능 최적화 방법을 다시 복습할 수 있었다.

0개의 댓글