2021/12/29) 5. 등수구하기 [1,2차원 탐색]
1. 문제
<등수구하기>
: N명의학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성한다. 같은 점수가 입력될 경우 높은 등수로 동일 처리한다. 즉, 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.
2. 해결 방법
- Array.from해서 배열을 초기화 해준다.
- 두 개의 for문을 돌리는데, 만약 i인덱스의 값보다 j인덱스의 값이 더 크면, 1씩 더해준다.
ex > arr[1] < arr[1]일 경우일 땐, 값이 같으므로 1이 더해지지 않고 패스됨.
만약 [92,92,73,92,100]일 때, arr[2]:73을 기준으로 안에 있는 for문을 돌리면, 92일 때 1누적 또 92일 때 1누적 73일 때 패스 92일 때 1누적 100일 때 1누적해서 결과적으로 5가 된다.
! 플러스 개념
-> Array.from : 배열 초기화!
- 첫 번째 파라미터로는 배열 길이를 주고, 두 번째 파라미터로는 화살표함수를 사용해 배열의 값을 준다!
ex > Array.from({length:7},()=>3)
혹은 이런 식으로도 가능함.
Array.from([1, 2, 3],(v, i) => i);
3. 정답
<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>
4. 내 코드와 비교 그리고 반성
나는 배열 초기화를 하지 않았고, cnt변수를 생성하여 최종 cnt값을 배열에 push하였다. 그리고 어차피 같은 배열 인덱스(ex > arr[1]:i와 arr[1]:j)끼리는 값이 같으니, 조건을 arr[j] > arr[i]로 주면, 패스될 수밖에 없는데, 쓸데없이 ===조건까지 넣었다. 그리고 cnt값을 1로 초기화하면 됐는데 굳이 0으로 초기화해서 코드를 더 난잡하게 만들었다. 제일 반성해야 할 점은 오답을 출력.. 근데 아직도 어디가 틀린건질 모르겠다.
<script> function solution(arr){ let answer = [], cnt = 0; for(let i = 0; i < arr.length; i ++){ for(let j = 0; j < arr.length; j ++){ if(arr[i] < arr[j] ) cnt++; } arr[i] = 1 + cnt; cnt = 0; answer.push(arr[i]); } return answer; } let arr=[87, 89, 92, 100, 76]; console.log(solution(arr)); </script>
ㅂㄷㅂㄷ
Author And Source
이 문제에 관하여(2021/12/29) 5. 등수구하기 [1,2차원 탐색]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@7lo9ve3/20211229-5.-등수구하기-12차원-탐색저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)