알고리즘(with TS)

알고리즘 풀이 5)6-8 (해쉬)

2023. 2. 6. 23:53

그동안 알고는 있었으나 생소해서 사용하지 못한 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"));