티스토리 뷰

알고리즘/코딩테스트 공부

5-6 학급 회장(해쉬)

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 12. 1. 23:41

문제

학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그
기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작
성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.

풀이

function solution(s) {
  let answer;
  s = str.split("");
  let max = Number.MIN_SAFE_INTEGER;
  // console.log(s);
  let object = { A: 0, B: 0, C: 0, D: 0, E: 0 };
  for (let i = 0; i < s.length; i++) {
    if (s[i] === "A") {
      object["A"] += 1;
    } else if (s[i] === "B") {
      object["B"] += 1;
    } else if (s[i] === "C") {
      object["C"] += 1;
    } else if (s[i] === "D") {
      object["D"] += 1;
    } else if (s[i] === "E") {
      object["E"] += 1;
    }
  }
  max = Math.max(
    object["A"],
    object["B"],
    object["C"],
    object["D"],
    object["E"]
  );

  answer = Object.keys(object).find((key) => object[key] === max);
  // console.log(object);

  return answer;
}

let str = "BACBACCACCBDEDE";
console.log(solution(str));

오브젝트를 만들어서 키값과 벨류값 정해준 뒤 맥스값을 찾아 벨류값으로 키값을 찾는 find로 문제를 풀었습니다.

다른 풀이

function solution(s) {
  let answer;
  let max = Number.MIN_SAFE_INTEGER;
  const map1 = new Map();
  for (let x of s) {
    if (map1.has(x)) map1.set(x, map1.get(x) + 1);
    else map1.set(x, 1);
    //console.log(map1.has(x));
    //console.log(x);
  }
  console.log(map1);
  for (let [key, val] of map1) {
    console.log(key, val);
    if (max < val) {
      max = val;
      answer = key;
    }
  }
  return answer;
}

let str = "BACBACCACCBDEDE";
console.log(solution(str));

map 을 만들어서 map.has(x) 를 통해 없으면  map.set (x,1)을 해주었고 만약 있다면 map.set(x,map.get(x)+1 을해서 map의 key,value 값들을 저장하였고 for (let [key,val] of map) 을 통해 key 값과 value 값을 동시에 출력하여 value 값이 max 보다 크다면 max 로 지정해주고 answer에는 key값을 넣어주어 답을 구했습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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 31
글 보관함