그동안 알고는 있었으나 생소해서 사용하지 못한 Map 자료형을 활용해서 문제를 풀게 되었다.
이번 기회에 Map에 요소를 추가하고 지우고 다양한 형태로 변환해서 사용할 수 있게 됐다.
Section5_6번: 학급 회장(해쉬)
function solution5_6(N: number, str:string):string {
const voteArr = str.split("")
let map = new Map();
voteArr.forEach(char => {
if(!map.has(char)) map.set(char, 1);
else map.set(char, map.get(char) + 1);
})
return [...map.entries()].reduce((a,b)=> a[1]>b[1] ? a : b)[0];
// [...map.entries()] -> [ [ 'B', 3 ], [ 'A', 3 ], [ 'C', 5 ], [ 'D', 2 ], [ 'E', 2 ] ]
}
console.log(solution5_6(15, "BACBACCACCBDEDE"));
- if문에서 else를 생략하고 나머지 케이스를 작성하고선 왜 값이 이상하게 나오나 했다. 이상한 버릇이 들었네... 정직하게 작성해야겠다^^
- [...map.entries()]로 map 요소들로 만들어진 이중배열을 만들 수 있다.
- reduce로 최대값을 구할 수 있다.(큰값을 누적비교하는 콜백함수 사용)
Section5_7번: 아나그램
function solution5_7(str1:string, str2:string): string {
let answer="YES"
let map1 = new Map();
str1.split("").forEach(char=> {
if(!map1.has(char)) map1.set(char, 1);
else map1.set(char, map1.get(char) + 1);
});
let map2 = new Map();
str2.split("").forEach(char=> {
if(!map2.has(char)) map2.set(char, 1);
else map2.set(char, map2.get(char) + 1);
});
for(let entry of map1){
if(map2.get(entry[0])===entry[1]) answer="YES";
else answer="NO";
}
return answer
}
console.log(solution5_7("abaCC", "Caaab"));
'알고리즘(with TS)' 카테고리의 다른 글
알고리즘 풀이 5)1-5 (투포인터 알고리즘, 슬라이드윈도우) (0) | 2023.01.29 |
---|---|
알고리즘 풀이 4)4-5 (완전탐색-블루투포스) & TS(unknown타입, Set타입) (0) | 2023.01.29 |
알고리즘 풀이 4)1-3 (완전탐색-블루투포스) (0) | 2023.01.23 |
알고리즘 풀이 3)4-5 (0) | 2023.01.23 |
알고리즘 풀이 2)6-7, 3)1-3 & TS(isNaN 사용시 주의할 부분) (0) | 2023.01.19 |