문제
N(1 <= N <= 100)명 학생의 국어 점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하라.
설명
국어 점수를 의미하는 N개 정수가 배열로 입력된다. 같은 점수가 입력될 경우엔 높은 등수로 동일 처리한다.
즉 가장 높은 점수가 92점인데, 92점이 3명 존재하면 1등이 3명이고 그 다음 점수는 4등이 된다.
나의 풀이
function solution(arr) {
const answer = [1, 1, 1, 1, 1];
const len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len; j++) {
if (arr[j] > arr[i]) answer[i]++;
}
}
return answer;
}
let arr = [95, 84, 95, 100, 76];
console.log(solution(arr));
- arr는 다음과 같이
[95, 84, 95, 100, 76]
이라는 정수로 이루어져 있다. - answer 배열을 선언해주고, 각 값에 등수를 의미하는 1을 모두 넣어준다.
- 2중 for문을 돌면서, 인덱스i에 위치한 값보다 인덱스j에 위치한 값이 크다면 answer의 인덱스i 값을 1씩 늘려주면 된다.
arr[i] === arr[j]
라면answer[i]
의 값 증가가 이루어지지 않는다.- 그러므로 자연스럽게 최고 점수인 92점이 3명이라면 모두 1등이 된다.
추가 이론) Array.from
만약 입력 배열 arr가 50의 크기를 가진다면?
const answer = [1,1,1,1,1,1,1,1,1,........,1];
다음과 같이 1을 50번 넣어줘야 한다.
이 때, Array.from
을 이용할 수 있다.
let arr = [87, 89, 92, 100, 76, 25];
const len = arr.length; // 6
const answer = Array.from({length : len}, () => 1); //[1, 1, 1, 1, 1, 1]
- 다음과 같이 배열의 크기 정보를 가지고, 원하는 초기 값을 넣어줄 수 있다.
- 참고 : Array.from
'DS & Algorithm > basic' 카테고리의 다른 글
[기초 알고리즘] 멘토링 - 자바스크립트 (0) | 2021.04.18 |
---|---|
[기초 알고리즘] 가장 짧은 문자거리 - 자바스크립트 (0) | 2021.04.16 |
[기초 알고리즘] 봉우리 - 자바스크립트 (0) | 2021.04.08 |
[기초 알고리즘] 최솟값 구하기 - 자바스크립트 (0) | 2021.04.07 |
[기초 알고리즘] 삼각형 판별하기 - 자바스크립트 (0) | 2021.04.07 |