점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력
나의 풀이
function solution(arr) {
let answer = [];
let order = [];
let array = arr.slice();
// 오름차순으로 정렬
for (let i = 0; i < arr.length; i++) {
order.push(Math.max(...array));
array.splice(array.indexOf(Math.max(...array)), 1); // 해당 값 지우기
}
// 순위 매기기
for (let i = 0; i < arr.length; i++) {
answer.push(order.indexOf(arr[i]) + 1);
}
return answer;
}
let arr = [87, 92, 92, 100, 76];
console.log(solution(arr));
array 배열을 오름차순으로 정렬하여 order라는 배열을 만들었다.
Math.max()로 가장 큰 인자를 order배열로 push했으며, 해당 인자는 splice를 통해 지웠다.
splice는 원본 배열에 영향을 미치므로, 매개변수로 받은 arr를 array라는 새로운 변수로 만든 것이다.
array = arr; 로만 하면 얕은 복사가 되어 각 변수가 영향을 미친다.
따라서 arr.slice()로 깊은 복사를 했다.
오름차순으로 정렬한 뒤,
기존 배열인 arr가 몇번째 인덱스에 있는지 확인하며 등수를 매겼다.
강사 풀이
function solution2(arr) {
let n = arr.length;
let answer = Array.from({ length: n }, () => 1); // 길이를 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, 92, 92, 100, 76];
console.log(solution2(arr));
먼저, Array.from()을 통해 등수를 다 1로 초기화 한 배열을 만들었다.
이중 for문을 통해, 해당 인자가 다른 인자보다 작으면 ++를 하여 등수가 하나 밀려나도록 했다.
'코딩테스트 문제풀이 > inflearn' 카테고리의 다른 글
[인프런] Node.js / 섹션2 - 1, 2차원 탐색 / 7. 봉우리 (0) | 2023.01.10 |
---|---|
[인프런] Node.js / 섹션2 - 1, 2차원 탐색 / 6. 격자판 최대합 (0) | 2023.01.09 |
[인프런] Node.js / 섹션2 - 1, 2차원 탐색 / 4. 점수계산 (0) | 2023.01.08 |
[인프런] Node.js / 섹션2 - 1, 2차원 탐색 / 3. 가위 바위 보 (0) | 2023.01.07 |
[인프런] Node.js / 섹션2 - 1, 2차원 배열 탐색 / 2. 보이는 학생 (0) | 2023.01.05 |