(알고리즘) 학급회장 (해쉬)

호두파파·2022년 1월 27일
0

알고리즘 연습

목록 보기
52/60


학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했다. 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있다.

선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정한다.

출력설명

학급 회장으로 선택된 기호를 출력한다.

입력예제

  • 'BACBACCACCBDEDE'

출력예제

C


문제풀이

function solution(s) {
  let answer;
  let max = 0;
  let hashObj = {};
  const arr = s.split('');
  for(let i = 0; i < arr.length; i++) {
    if (hashObj[arr[i]]) {
      hashObj[arr[i]] += 1;
    } else {
      hashObj[arr[i]] = 1;
    }   
  }
  console.log(hashObj);
  for(let key in hashObj) {
    const value = hashObj[key];
    if (value > max) {
      max = value
      answer = key; 
    }
  }
  return answer;
}

const s = 'BACBACCACCBDEDE';
console.log(solution(s));

빈 배열에 키를 전달해주고, 키에 맞는 값을 증감하는 식으로 배열을 정리해주었다.

배열 안에서 value를 뽑아내, 최대값을 의미하는 변수와 비교해 키를 리턴값으로 재할당하는 식으로 문제를 풀이했다.


JavaScript로 Hash 처리하기

https://velog.io/@yunsungyang-omc/JS-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A1%9C-%ED%95%B4%EC%8B%9C%ED%85%8C%EC%9D%B4%EB%B8%94-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0


new Map() 함수로 hash화해서 문제 풀기

const hash = new Map()으로 변수를 선언하면, 키와 벨류가 한 쌍의 쌍으로 묶이는 객체를 얻을 수 있다.

set()함수와 get()함수로 해당 프로퍼티가 존재하면, 숫자를 증감시키는 형식으로 문제를 풀이하면 된다.

function solution(s) {
	let answer;
  let hash = new Map();
  for (let x of s) {
    if (hash.hasOwnProperty(x)) {
      hash.set(x, hash.get(x) + 1);
    } else {
      hash.set(x, 1);
    }
  }
  console.log(hash);
  let max = Number.MIN_SAGE_INTEGER;
  for (let [key, value] of hash) {
    if (value > max) {
      max = value;
      answer = key;
    }
  }
  return answer;
}

profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글