[LeetCode] 423. Reconstruct Original Digits from English

Chobby·약 2시간 전

LeetCode

목록 보기
997/997

😎풀이

  1. 각 숫자 별 필요한 단어 수 정의
  2. s를 순회하며 각 문자의 빈도 확인
  3. 특정 단어(char)를 기준으로 해당 수를 정답 배열에 추가
  4. 오름차 순으로 정렬하여 문자열 형태로 병합 후 반환
function originalDigits(s: string): string {
    const numFreq = {
        0: { z: 1, e: 1, r: 1, o: 1 },
        1: { o: 1, n: 1, e: 1 },
        2: { t: 1, w: 1, o: 1 },
        3: { t: 1, h: 1, r: 1, e: 2 },
        4: { f: 1, o: 1, u: 1, r: 1 },
        5: { f: 1, i: 1, v: 1, e: 1 },
        6: { s: 1, i: 1, x: 1 },
        7: { s: 1, e: 2, v: 1, n: 1 },
        8: { e: 1, i: 1, g: 1, h: 1, t: 1},
        9: { n: 2, i: 1, e: 1 }
    }
    const freq = new Map<string, number>()
    for(const char of s) {
        freq.set(char, (freq.get(char) ?? 0) + 1)
    }
    const result = []
    function construct(char: string, num: number) {
        while(freq.has(char)) {
            result.push(num)
            const target = numFreq[num]
            for(const key in target) {
                freq.set(key, freq.get(key) - target[key])
                if(freq.get(key) > 0) continue
                freq.delete(key) 
            }
        } 
    }
    construct('z', 0)
    construct('w', 2)
    construct('u', 4)
    construct('x', 6)
    construct('g', 8)
    construct('o', 1)
    construct('o', 1)
    construct('t', 3)
    construct('f', 5)
    construct('s', 7)
    construct('n', 9)
    return result.sort().join('')
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글