학생들의 점수를 공백으로 구분하여 입력을 받고 그 중 1~3위 학생(여러명일 수 있음, 중복 포함)들에게 사탕을 주기로 하였는데 사탕을 받을 학생의 수를 출력하시오.
입력 : 97 86 75 66 55 97 85 97 97 95
출력 : 6
상위 3위가 총 몇 명인지 구하기
점수를 공백으로 입력 받는다.
아래와 같이 입력된 점수와 횟수를 묶어낸다. => 객체 활용하기
{ '55': 1, '66': 1, '75': 1, '85': 1, '86': 1, '95': 1, '97': 4 }
Object.keys()를 활용하여 배열의 속성 이름을 배열로 담아낸다.
consol.log로 어떤 배열이 나오는지 확인한다.
확인해보니
['55', '66', '75', '85', '86', '95', '97']
이렇게 배열이 자동 정렬이 되어 있는 것을 확인 할 수 있다.
sort() 메소드를 활용해서 정렬을 뒤집어 준다.
그리고 배열의 0번째, 1번째, 2번째의 value값만 더하는 로직을 만들어 준다.
const score = prompt('점수를 공백으로 입력하세요. 상위 3위는 몇 명인지 알려드려요.').split(' ');
let object = {};
let result = 0;
for (key of score) {
object[key] = object[key] === undefined
? 1
: object[key] = object[key] + 1;
}
for (let i = 0; i <= 2; i ++) {
let member = Object.keys(object).sort((a,b)=> b-a);
result += object[member[i]];
}
console.log(result);
// 입력 : 97 86 75 66 55 97 85 97 97 95
// 출력 : 6
알고리즘 문제를 풀면서 인터넷 강의로 접했던 개념들을 실제로 어떻게 적용해야하는지 막막했었다.
누군가에게는 쉬운 문제일지라도 나에게는 어려운 문제들이다.
오늘 푼 문제는 몇 일 전 알게된 개념 활용을 하는 할 수 있는 비슷한 문제였는데도 해결하는데 오래걸렸다.
생각의 힘과 반복을 통해 메서드 활용을 잘 하도록 노력해야겠다.
그리고 이번 문제를 풀면서도 데이터 타입 설정을 잘못하여 문제가 발생하였는데 항상 가장 기본인 부분부터 잘 다지도록 하자.