📌강의 정리
단순히 등수를 측정하는 것에서 이제 중복등수를 계산해야한다.
이중 포문을 돌리는데 먼저 앤서배열에 1로 다 값을 준다.
i를 주인공으로 자기보다 큰 점수가 있으면 자기 등수를 ++한다.
처음에 배열에 값을 다 1로 주고 그 앤서배열을 비교하며 카운트하면
중복값을 쉽게 처리할 수 있다.
배열을 다 1로 초기화 하기 위해서 Array.from을 써야한다.
Array.from({length:n}, ()⇒1);
n은 배열의 길이이고 ()은 콜백함수이다.
이중 포문을 돌리면서 i보다 j가 크면 앤서값을 ++하면 끝이다.
📌느낀점
정말 알고리즘의 세계는 아는 것이 힘이고 머리가 나쁘면 코드가 고생하는게 맞다.
알고나면 쉬운데 왜 그 생각을 못했는지 모르겠다.
이 문제는 풀긴했지만 전혀다른 풀이였는데 강사님 풀이를 잘 기억해두고 있어야겠다.
Array.from에 대한 정의가 잘 안되어있다. 잘 기억해두자.
//나의 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let answer = [];
let rank = 1, cnt=0, max=0;
for(let i=0;i<arr.length; i++){
max = 0;
cnt = 0;
for(let j=0;j<arr.length; j++){
if(max<arr[j]){
max = arr[j];
}
}
for(let k=0; k<arr.length; k++){
if(arr[k] === max){
answer[k] = rank;
arr[k] = -1;
rank++;
cnt++;
}
if(cnt === 2){
answer[k]--;
cnt--;
}
}
}
return answer;
}
let arr=[87, 89, 92, 100, 89, 76];
console.log(solution(arr));
</script>
</body>
</html>
//강사님 코드
<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>
'JS 알고리즘 문제풀이 > 섹션 2. 1, 2차원 배열 탐색' 카테고리의 다른 글
7.봉우리 (0) | 2022.01.13 |
---|---|
6.격자판 최대합 (0) | 2022.01.13 |
4.점수계산 (0) | 2022.01.12 |
3.가위바위보 (0) | 2022.01.12 |
2.보이는 학생 (0) | 2022.01.12 |