ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [제코베/JavaScript] 38번 호준이의 아르바이트
    🍓𝗪𝗲𝗯/𝖩𝖺𝗏𝖺𝖲𝖼𝗋𝗂𝗉𝗍 2021. 7. 10. 10:28

    1. 문제 설명

    호준이는 아르바이트로 영어 학원에서 단어 시험지를 채점하는 일을 하고 있다. 호준이가 일하는 학원은 매번 1위부터 3위까지의 학생에게 상으로 사탕을 준다. 그런데 오늘은 마침 사탕이 다 떨어져서 호준이가 채점을 하고 점수를 보내면, 당신이 아이들의 숫자만큼 사탕을 사러 가기로 했다. 1위 ~ 3위 학생은 여러명일 수 있고 1~3위 학생 중 중복되는 학생까지 포함하여 사탕을 사기로 한다. 학생들의 점수를 공백으로 구분하여 입력을 받고 사탕을 받을 학생의 수를 출력하세요.

     

    2. 나의 풀이

    set으로 중복 없애고, 순위 3개 점수를 구해서 배열을 만든다.
    새롭게 만든 배열(중복없는 순위3개)과 동일한 점수가 있으면 count를 1 증가시킨다.

    const data = prompt('점수를 입력하세요.').split(' ').map(function (n) {
        return parseInt(n, 10);
    });
    const scores = new Set(data);
    let arrScores = Array.from(scores);
    arrScores.sort((a, b) => {
        return b - a;
    });
    
    let ranking = [];
    let count = 0;
    
    ranking = arrScores.slice(0, 3);
    
    for (let index in data) {
        if (ranking.includes(data[index])) {
            // console.log(data[index]);
            count += 1;
        }
    }
    // 입력: 97 86 75 66 55 97 85 97 97 95
    console.log(count); // 출력: 6

     

    3. 답안

    const scores = prompt('점수입력').split(' ').map(function(n){
      return parseInt(n, 10);
    });
    
    scores.sort((a, b) => {
      return a-b;
    });
    
    let count = 0;
    let arr = [];
    
    while (arr.length < 3) {
      let n = scores.pop();
      if (!arr.includes(n)){
        arr.push(n);
      }
      count += 1;
    }
    
    console.log(count);

    점수를 입력받아 정수로 바꿔준 다음, 바로 오름차순(1->2->3->...)으로 정리해준다.

    그럼 score 배열을 뒤에서부터 보면 큰 것들부터 볼 수 있는데, 

    arr라는 배열의 개수가 3보다 작을 때까지 score배열에서 pop()한 다음,

    바로 arr가 해당 숫자가 없으면(중복된 숫자가 아니면) arr에 push()한다.

     

    score는 [55, 66, 75, 85, 86, 95, 97, 97, 97, 97]이고,

    반복문 1회 때

    arr.length 가 0이고, n은 97, arr=[97], count = 1

     

    반복문 2회 때

    arr.length 가 1이고, n은 97, arr=[97], count = 2

     

    반복문 3회 때

    arr.length 가 1이고, n은 97, arr=[97], count = 3

     

    반복문 4회 때

    arr.length 가 1이고, n은 97, arr=[97], count = 4

     

    반복문 5회 때

    arr.length 가 1이고, n은 95, arr=[97, 95], count = 5

     

    반복문 6회 때

    arr.length 가 2이고, n은 86, arr=[97, 95, 86], count = 6

     

    반복문 7회 때

    arr.length 가 3이어서, while문 벗어나게 된다.

     

    따라서 count는 6이다.

     

    내가 set을 이용해 중복없는 배열을 만들었는데, 답안에서는 중복없는 arr를 채우는 동시에 count를 세는 풀이가 인상적이었다.

    댓글

ahntoday