자바스크립트, 가장 많이 나온 이름과 횟수 구하기

라용·2022년 9월 13일
0

JS 100제 _ 제코베

목록 보기
8/13

제주코딩베이스캠프 자바스크립트 100제를 공부하며 정리한 내용입니다. 문제와 정답 노션 링크(무료), 인프런 해설 강의(유료)

문제

입력 받은 이름 중 가장 많이 나온 이름과 나온 횟수를 출력합니다.

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

해설

각 이름 별로 몇 표를 받았는지 정리하기 위해 객체 형태로 데이터를 저장합니다.

str = "원범 원범 혜원 혜원 혜원 혜원 유진 유진"
const strArr = str.split(" ") // 입력값 빈칸으로 요소 나누어서 배열 만들기

let result = {}; // 데이터 담을 객체 
let winner = "" ; // 최다 득표자 이름 담을 변수

for (let i in strArr) { // 배열의 요소를 돌면서, 빈 객체에 키와 밸류를 넣는다.
	let key = strArr[i]; // 해당 인덱스 이름 저장
	result[key] = result[key] === undefined ? 1 : result[key] = result[key] + 1;
	// result[key] 로 객체의 key 를 넣고, 그 키에 해당하는 value 값을 조건문으로 할당 (이름에 해당하는 카운트 넘버값 할당)
	// 처음 원범이로 돌 때 {원범 : undefined} 이므로 value 에 1을 넣어줌.
	// 그 다음 돌 때는 {원범 : 1} 이므로 1에 1을 더해줌.
	// 새로운 이름이 나오면 또 1로 시작
}

이렇게 객체로 해당 이름의 숫자를 카운트하고나서 어떤 값이 제일 큰지 확인합니다. 객체의 키값만 반환하는 Object.keys() 메소드와 배열의 각 요소에 주어진 함수를 실행하고 하나의 결과값을 반환하는 reduce 메소드를 사용합니다.

winner = Object.key(result) // 이렇게 하면 객체의 키값, 이름만 출력

winner = Object.keys(result).reduce(function(a, b){ // 리듀스는 배열의 두 요소로 아래 함수를 실행하며 모든 요소를 비교할 때까지 반복
	return result[a] > result[b] ? a : b // reslut[a] 는 해당 이름의 카운트 넘버이므로 비교해서 큰 이름으로 다시 비교
}) 
// 순환이 끝나면 중첩된 a, 이름을 반환

최종 값을 문자열로 출력하면,

console.log(`${winner} 가 총 ${result[winner]} 표로 반장이 되었다.`)
profile
Today I Learned

0개의 댓글