자료구조 및 알고리즘/JavaScript Practice

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

Ryomi 2024. 12. 20. 21:41
728x90
반응형

24년 12월 20일
해결한 문제 갯수: 4

 

문제 설명

문제 분석

이 문제는 숫자와 영단어가 섞여있는 문자열에서 모든 영단어를 해당하는 숫자로 변환하는 것이 목표입니다.

  • "one4seveneight" → 1478
  • "23four5six7" → 234567
  • "2three45sixseven" → 234567

 

접근 : Object.entries() / reduce()

function solution(s) {
    const nums = {
        zero: 0, one: 1, two: 2, three: 3, four: 4, 
        five: 5, six: 6, seven: 7, eight: 8, nine: 9
    }
    
    const answer = Object.entries(nums).reduce((answer, [k, v]) => {
        answer = answer.replaceAll(k, v)
        return answer
    }, s)
     
    return Number(answer)
}
  1. nums 객체 생성
    • 영단어를 키로, 숫자를 값으로 하는 객체를 만들어 매핑을 정의합니다.
  2. Object.entries()와 reduce() 활용
    • Object.entries(nums)로 객체를 [키, 값] 쌍의 배열로 변환합니다.
    • reduce()를 사용해 각 영단어를 순회하며 해당하는 숫자로 치환합니다.
    • replaceAll()로 문자열 내의 모든 영단어를 한 번에 치환합니다.
  3. 최종 변환
    • Number()를 사용해 문자열을 숫자로 변환하여 반환합니다.

시간 복잡도

  • Object.entries()는 O(n)의 시간 복잡도를 가집니다 (n은 객체의 속성 수).
  • reduce()와 replaceAll()을 통한 순회도 O(n)의 시간 복잡도를 가집니다.
  • 따라서 전체적인 시간 복잡도는 O(n)입니다.

728x90
반응형