본문 바로가기
Algorithm/JavaScript

[배열탐색] 등수 구하기

by _sweep 2021. 12. 9.

자바스크립트 알고리즘 문제풀이 강의를 듣고 정리한 내용입니다.

 

 

 

 

📋 문제

N명의 학생의 점수가 입력되면 각 학생의 등수를 입력한 순서대로 출력한다.

같은 점수가 입력될 경우 높은 등수로 동일 처리한다.

예를 들어 92, 92, 92, 89, 70이 입력으로 들어온다면 출력은 1, 1, 1, 4, 5 이다.

 

 

👉 입력

N개의 정수가 입력된다.

 

 

👈 출력

각 학생의 등수가 순서대로 출력된다.

 

 

📝 풀이

 

function solution(arr) {
    let answer = Array(arr.length).fill(1);
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length; j++) {
            if (arr[i] < arr[j]) answer[i]++;
        }
    }
    return answer;
}

let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));

 

answer라는 배열을 만드는데 길이는 입력받은 배열의 길이와 같고 모두 1로 초기화한다.

이중 for문을 돌며 조합의 경우의 수를 모두 구한 후 값을 비교해 자신보다 큰 값이 있으면 answer[i]에 1씩 더한다.

 

+) answer = Array.from({length: arr.length}, () => 1) 이렇게 해도 길이가 arr과 같은 1로 초기화된 배열이 생성된다.

 

function solution(arr) {
    let answer = arr.map((i) => arr.filter((j) => i < j).length + 1);
    return answer;
}

let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));

 

map과 filter를 이용해 더 짧은 구문으로도 구현이 가능하다.

filter로 현재 자신보다 큰 수들을 골라낸 후 이들의 개수에 1을 더해 map으로 새로 조합된 배열을 만든다.

 

 

 

 

 

'Algorithm > JavaScript' 카테고리의 다른 글

[배열탐색] 봉우리  (0) 2021.12.09
[배열탐색] 격자판 최대합  (0) 2021.12.09
[배열탐색] 점수계산  (0) 2021.12.09
[배열탐색] 가위바위보  (0) 2021.12.09
[배열탐색] 보이는 학생  (0) 2021.12.09

댓글