[JS 문제풀이] - 최대 중복 값과 개수

rlorxl·2022년 2월 19일
0

문제

새 학기를 맞아 호준이네 반은 반장 선거를 하기로 했습니다. 그런데 표를 하나씩 개표하는 과정이 너무 번거롭게 느껴진 당신은 학생들이 뽑은 후보들을 입력받으면 뽑힌 학생의 이름과 받은 표 수를 출력하는 프로그램을 작성하기로 하였습니다.

풀이

입력 값의 중복 값과 개수를 key,value로 저장하는 객체를 만드는 방법.

1. forEach로 object에 값 할당

빈 객체를 선언하고 key가 있다면 key, value+1를 할당, key가 없다면 key, 1을 객체에 할당

let map = {};
    name.forEach(x => {
       if(map[x]) map[x] = map[x]+1;         
       else map[x] = 0 + 1;
    });
    console.log(map);

2. Map객체 이용

let map = name.reduce((acc,cur) => {
  	acc.set(cur, (acc.get(cur)||0) +1);
  	return acc;
},new Map());

3. reduce()이용

const result = name.reduce((acc,cur) => {
  	acc[cur] = (acc[cur] || 0) +1;
  	return acc;
},{});

코드

function answer(str){
 let name = str.split(' ');
 let map = name.reduce((acc,cur) => {
        acc.set(cur, (acc.get(cur)||0) +1);
        return acc;
    },new Map());
        
    let count = Math.max(...(map.values())); // Map의 value중 최대값
    let obj = Object.fromEntries(map); // Map -> object
    let winner = Object.keys(obj).find(key => obj[key] === count);
	// value로 key값 찾기
	console.log(`${winner}(이)가 총${count}표로 반장이 되었습니다.`)
}

Object.keys() 메소드는 주어진 객체의 속성 이름들(key)을 일반적인 반복문과 동일한 순서로 순회되는 열거할 수 있는 배열로 반환.

정답코드

function answer(str){
     let name = str.split(' ');

     let result = {};
     let winner = "";

     for(let index in name){
         let val = name[index];
         result[val] = result[val] === undefined ? 1 : result[val] + 1;
     }
        
     winner = Object.keys(result).reduce(function(a, b){
         return result[a] > result[b] ? a : b
     });
        
     console.log(`${winner}(이)가 총 ${result[winner]}표로 반장이 되었습니다.`);
    }
profile
즐겜하는거죠

0개의 댓글