N(1<=N<=100)명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는
프로그램을 작성하세요.
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr) {
//내림차순으로 정렬 후,
//내림차순의 인덱스(순위)가 원래 배열의 몇번째에 위치하는지를 리턴하면 됨
const sort = arr.slice().sort((a, b) => b - a)
// console.log(sort)
const result = arr.map((element) => sort.indexOf(element) + 1) // 순위 매기기
// debugger
return result
}
let arr = [87, 89, 92, 100, 76]
console.log(solution(arr))
</script>
</body>
</html>
컨셉
: 2개의 배열을 비교할 건데, 하나는 큰 순서대로 정렬한 배열(b)과 원래 배열(a)이다.
두 배열을 비교해서 a === b일때, b의 몇번째 인덱스에 존재하는가를 리턴하면 끗.
코드리뷰
a. 복사본을 만들기 위해 slice()를 사용하고, 내림차순으로 정렬을함
b. map()을 사용하여, indexOf()를 통해, 원래배열(a)와 정렬한 배열(b)의 같은 숫자의 위치를 찾아낸다.
(indexOf()는 참 일때, -1을 리턴하니 +1을 해준다.)
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let n=arr.length;
let answer=Array.from({length:n}, ()=>1);
for(let i=0; i<n; i++){
for(let j=0; j<n; j++){
if(arr[j]>arr[i]) answer[i]++;
}
}
return answer;
}
let arr=[87, 89, 92, 100, 76];
console.log(solution(arr));
</script>
</body>
</html>