본문 바로가기
Front-End/Algorithm

[알고리즘]등수 구하기

by 민바이민 2021. 5. 14.

N(1<=N<=100)명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요.

입력설명
첫 줄에 N(3<=N<=1000)이 입력되고, 두 번째 줄에 국어점수를 의미하는 N개의 정수가 입력 된다. 같은 점수가 입력될 경우 높은 등수로 동일 처리한다. 즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.

출력설명
입력된 순서대로 등수를 출력한다.

입력예제 1
5
87 89 92 100 76

출력예제 1
43215

 입력예제 2
5
92 92 92 100 76

 출력예제 1
22215

 

문제풀이

결과값으로 나오는 배열을 모두 1로 초기화 시켜놓고 이중포문을 돌면서 나보다 큰 수랑 비교가 되면 해당 배열 원소를 1 더해준다.

function solution(arr) {
    let n = arr.length
    // arr의 개수만큼 배열의 길이를 정하고 모두 1로 초기화 한다
    let answer = Array.from({ length: n }, () => 1);
    for (let i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            if (arr[j] > arr[i]) answer[i]++
        }
    }

    return answer;
}

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

 

Array.from() 이란 무엇인가 ?

MDN에서는 Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운Array 객체를 만듭니다.라고 설명되어 있습니다.

console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]

console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]

 

위의 예시처럼 문자열을 넣으면 문자열을 하나씩 띄어 배열에 담아주고, 배열을 넣고 함수를 넣어주면 함수를 통해 새로운 배열을 생성해냅니다.

 

문제로 다시 돌아가서 보면, 

let n = arr.length
let answer = Array.from({ length: n }, () => 1);
// let answer = Array.from({ length: arr.length }, () => 1);

 

자바스크립트에서는 배열을 객체로 분류하고 있기 때문에, Array.from(배열, 함수)에서 배열의 길이를 받아온 arr.length로 정의하고 그것을 모두 1로 초기화 시켜주도록 하였습니다.

댓글