
😎풀이
- 각 숫자 별 필요한 단어 수 정의
s를 순회하며 각 문자의 빈도 확인
- 특정 단어(
char)를 기준으로 해당 수를 정답 배열에 추가
- 오름차 순으로 정렬하여 문자열 형태로 병합 후 반환
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('')
};