아나그램

문제


주의할점: 두개의 단어는 길이가 무조건 같다!

나의코드

//sh1,sh2의 Map을 만들어 요소를 비교한다.
let str1 = "AAABBBCCC";
let str2 = "CCCBBBAAA";
let answer = "true";

// Map을 만들어 알파벳의 요소의 갯수를 계산하는 함수
function newMap(str) {
  let map = new Map();
  for (let x of str) {
    if (map.has(x)) map.set(x, map.get(x) + 1);
    else map.set(x, 1);
  }
  return map;
}

let sh1 = newMap(str1); // Map(3) { 'A' => 3, 'B' => 3, 'C' => 3 }
let sh2 = newMap(str2); // Map(3) { 'C' => 3, 'B' => 3, 'A' => 3 }

// 두개 비교
for (let s of str1) {
  if (sh1.get(s) !== sh2.get(s)) answer = "false";
}
console.log(answer);

나의 코드 문제점

  • 두개의 Map을 만든다음 다시 for문을 돌려서 비교해야한다. -> 하나의 Map을 만든다음 비교해보자.

개선

let str1 = "AAABBBCCC";
let str2 = "CCCBBBAAS";
let answer = "YES";

let sH = new Map();
// str1을 Map으로 각 알파벳의 갯수 알아보기.
for (let x of str1) {
  if (sH.has(x)) sH.set(x, sH.get(x) + 1);
  else sH.set(x, 1);
}
// str1에 str2의 알파벳을 넣는다.
// 있으면 -1을 해준다. -> 0이 되었을 경우에도 해당 알파벳이 나오면 false
// 없으면 false
for (let x of str2) {
  if (!sH.has(x) || sH.get(x) == 0) answer = "NO";
  sH.set(x, sH.get(x) - 1);
}
console.log(answer);

좋은 웹페이지 즐겨찾기