JS 알고리즘 문제풀이/섹션 2. 1, 2차원 배열 탐색

5.등수구하기

crab. 2022. 1. 12. 11:38

📌강의 정리

단순히 등수를 측정하는 것에서 이제 중복등수를 계산해야한다.

이중 포문을 돌리는데 먼저 앤서배열에 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