Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 노노그램
- 바질토마토뭐시기
- 누룽지소금빵
- 메탈퍼즐
- 서울제빵소
- 뜨아거
- 송리단
- javascript
- 하스스톤
- 버즈2프로
- 코딩테스트
- 미앤아이
- 3d퍼즐
- LeetCode
- 발더스3
- 천등
- 메일우유
- 코테
- 발더스게이트
- 맛집
- 알고리즘테스트
- 눈알빠지겠네
- 게임
- 토이프로젝트
- 밥먹고
- 나쫌
- 취미
- DIY
- 발더스모드
- 잠실새내
Archives
- Today
- Total
.Zzumbong
[leetCode/JS] 451. Sort Characters By Frequency 본문
난이도 [ 🤔 ] Medium
문제 설명
Given a string s
, sort it in decreasing order based on the frequency of the characters. The frequency of a character is the number of times it appears in the string.
Return the sorted string. If there are multiple answers, return any of them.
문자열 s에 문자가 등장횟수만큼 내림차순 정렬한다.
aaaccc, cccaaa 는 둘다 정답이란다. 숫자만 신경쓰면 된다.
입출력 예
Example 1:
Input: s = "tree"
Output: "eert"
Explanation: 'e' appears twice while 'r' and 't' both appear once.
So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.
Example 2:
Input: s = "cccaaa"
Output: "aaaccc"
Explanation: Both 'c' and 'a' appear three times, so both "cccaaa" and "aaaccc" are valid answers.
Note that "cacaca" is incorrect, as the same characters must be together.
Example 3:
Input: s = "Aabb"
Output: "bbAa"
Explanation: "bbaA" is also a valid answer, but "Aabb" is incorrect.
Note that 'A' and 'a' are treated as two different characters.
Constraints
1 <= s.length <= 5 * 105
s
consists of uppercase and lowercase English letters and digits.
내 솔루션
- 문자열을
hasmap
으로 문자를key
로, 등장 숫자를value
로 만든 후 - 오름차순으로
sorting
한다. map
으로repeat
하여 반복시킨 후 배열을join
해서 문자열로 리턴한다.
/**
* @param {string} s
* @return {string}
*/
var frequencySort = function(s) {
// s = tree
const map = {}
for(const str of s) {
map[str] = (map[str] || 0) + 1;
}
// map: { t: 1, r: 1, e: 2 }
return Object.entries(map)
.sort((a, b) => b[1] - a[1]) // [ [ 'e', 2 ], [ 't', 1 ], [ 'r', 1 ] ]
.map(s => s[0].repeat(s[1])) // [e, e, r, t]
.join(''); // 'eert'
};
감상평
- 생각보다 까다로웠다.
- reduce를 쓸지 그냥 for 문으로 돌릴지 조금 느리더라도 이쁘게 만들지?
- 고민하는 시간이 좀걸렸다. repeat을 생각하지 못했다면 조금 더러운 코드가 됐을 가능성이 크다.
- 그리고 왜이렇게 빠르지?
'coding test > leetCode' 카테고리의 다른 글
[leetCode/JS] 876. Middle of the Linked List (0) | 2022.12.05 |
---|---|
[leetCode/JS] 2256. Minimum Average Difference (0) | 2022.12.04 |
[leetCode/JS] 1657. Determine if Two Strings Are Close (0) | 2022.12.02 |
[leetCode/JS] 1704. Determine if String Halves Are Alike (0) | 2022.12.01 |
[leetCode/JS] 1207. Unique Number of Occurrences (0) | 2022.11.30 |
Comments