자바스크립트, 오름차순 정렬, 중복되는 순위 구하기

라용·2022년 9월 14일
0

JS 100제 _ 제코베

목록 보기
9/13

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

문제

여러명의 점수를 받고 1~3위 학생의 수를 출력합니다. 같은 점수라면 공동 1등, 2등, 3등이 될 수 있습니다. (중복까지 포함)

// 입력
97 86 75 66 55 97 85 97 97 95
// 출력
6 (974, 951, 861)

풀이

점수를 오름차순으로 정렬하고, 빈배열에 3등까지의 점수가 담길 때까지 (배열의 길이가 3까지) 오름차순의 마지막 값을 넣어줍니다. (1등의 점수) 이때 중복되는 값이 들어가지 않게 조건을 달아주고, 그렇게 반복문을 도는 만큼 카운트를 증가시킵니다.

sort 메서드를 사용하면 점수를 오름차순으로 정렬할 수 있습니다.

const scores = ["97", "86", "75", "66", "55", "97", "85", "97", "97", "95"]

scores.sort((a, b) => a - b); // 오름차순 정렬, b-a 는 내림차순

3등까지 점수를 담을 빈배열과 카운트할 변수를 만듭니다.

let top3 = [];
let count = 0;

이제 배열의 길이를 조건으로 반복문을 돌리면서, 오름차순 배열의 마지막 값을 pop 메서로 추출해서 담고, 해당 값이 배열에 없을 경우면 배열에 push 합니다. 그러면서 카운트 합니다.

while (top3.lengh < 4) {
	let value = scores.pop(); // 오름차순 마지막, 가장 높은 수를 변수에 담고
	if (!top3.includes(value)) { // 해당 값이 기존 배열에 없을 때 
		top3.push(value); // 배열에 넣어준다.
	}
	count++;
}

빈 배열 부터 돌기 때문에 0, 1, 2, 3 으로 4번을 돌게 되므로 (4등을 중복없이 한번더 카운트) 최종 카운트에서 -1을 해줍니다.

profile
Today I Learned

0개의 댓글