
😎풀이
- 해시맵 정의
s
순회
2-1. 모든 문자의 빈도 해시맵에 기록
- 가장 빈도가 높은 문자가 모두 없어질 때까지 정렬 순서에 따라 a-z 혹은 z-a 반복
3-1. 현재 문자를 result에 추가하고 빈도 1 감소
- 합쳐진 문자 반환환
function sortString(s: string): string {
let result = ''
const frequent = new Map<string, number>()
for(const char of s) frequent.set(char, (frequent.get(char) ?? 0) + 1)
let retryCount = 0
for(const [_, value] of frequent) retryCount = Math.max(retryCount, value)
let isAsc = true
while(retryCount) {
if(isAsc) {
for(let i = 97; i < 123; i++) {
const curChar = String.fromCharCode(i)
if(!frequent.has(curChar) || frequent.get(curChar) <= 0) continue
frequent.set(curChar, frequent.get(curChar) - 1)
result += curChar
}
} else {
for(let i = 122; i > 96; i--) {
const curChar = String.fromCharCode(i)
if(!frequent.has(curChar) || frequent.get(curChar) <= 0) continue
frequent.set(curChar, frequent.get(curChar) - 1)
result += curChar
}
}
isAsc = !isAsc
retryCount--
}
return result
};