[제코베 No.37] 반장 선거

Jetom·2021년 8월 11일
0

Javascript

목록 보기
7/25
post-thumbnail

문제

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

입력
원범 원범 혜원 혜원 혜원 혜원 유진 유진

출력
혜원()가 총 4표로 반장이 되었습니다.

나름대로의 알고리즘 🧐

  1. 변수 name에 prompt로 입력 값을 받은 뒤 split로 공백 기준으로 자른다.
  2. for문으로 빈 객체인 변수에 key값(학생 이름)을 받아 왔을 때 값이 없다면 1을 값이 있다면 +1을 해주는 조건문을 만든다.

--- 😢 이 곳은 어려워서 정답의 힘을 빌렸다.
3. key값(학생 이름)을 출력하고, reduce로 득표 수를 비교한다.
4. console.log로 값을 찍는다.


(21.08.11일 기준으로 아는 만큼 적어보려고한다. 아직 알고리즘의 3번은 이해가 가지않아 내일까지 공부하고 수정할 예정!)

21.08.11 코드

const name = prompt('반장 선거').split(' ');
let score = {};
let result = '';

//for문이 익숙해서 짠 코드
const name = prompt('반장 선거').split(' ');
let result = {};
let winner = '';

for(let i = 0; i < name.length; i++){
  if(result[name[i]] === undefined){
    result[name[i]] = 1;
  } else {
    result[name[i]] = result[name[i]] + 1;
  }
} 
console.log(result);

//for in문 코드
const array = prompt('이름을 입력해주세요.').split(' ');
let result = {};
let winner = "";

for(let index in array){
  let val = array[index];
  result[val] = result[val] === undefined ? 1 : result[val] = result[val] + 1;
}

3번에서 필요한 메서드는 두 개인데 첫 번째는 reduce, 두 번째는 Objcet.keys이다. 따라서 메서드부터 어떤 역할을 하는지 살펴보자!

📝 reduce()

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.

리듀서 함수는 네 개의 인자를 가집니다.

  1. 누산기accumulator (acc)
  2. 현재 값 (cur)
  3. 현재 인덱스 (idx) - Optional
  4. 원본 배열 (src) - Optional

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

//예제코드
const jetom = [0, 1, 2, 2];

//reduce의 첫번째 파라미터는 누적값, 두번째는 현재값이다.
const jetomAge = jetom.reduce((acc, cur) => {
	return acc + cur;
                              
//0은 index가 아니라 초기값을 0으로 세팅한다는 뜻이다.
}, 0)

// 0 + 1 
// 1 + 2
// 3 + 2
console.log(jetomAge);

📝 Objcet.keys()

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

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

(keys만 보여준다는 말이 이렇게 어려울줄이야..🙄)

const jetom = {
	age: 5,
  	blood: 'Bichon frise',
    cute: 'very cute'
}

console.log(Object.keys(jetom));

//배열도 가능하다. 하지만 index를 반환한다.

const jetom = ['age', 'blood', 'cute'];

console.log(Object.keys(jetom));
  1. obj인 제톰을 출력한 결과물

  1. arr인 제톰을 출력한 결과물

💡 Object.value도 있으니 참고하자!


최종 코드 🧚‍♀️

const student = prompt('이름').split(' ');

let result = {};
let winner = '';

for(let name in student){
	let val = student[name];
	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]}입니다~ 박수 짝짝짝.`);

이틀을 보면서 마지막 winner의 reduce를 한번 더 살펴봐야할것같다!!!!!! 파이팅 내 자신 😢😢😢😢

profile
사람이 좋은 인간 리트리버 신혜리입니다🐶

0개의 댓글