スポーツウェア


indexOf

arr.indexOf(찾을 요소[, 찾기 시작할 인덱스])
は、
  • を返します.配列内の要素の最初のインデックスです.気づかなかったら-1
  • [スポーツウェア]
    問題の説明
    昼食の時間に盗まれ、一部の学生の運動服が盗まれた.幸いなことに、余分な運動服を貸したい学生がいます.学生の番号は体格順で、前の番号の学生か後ろの番号の学生の運動服しか貸せません.例えば、4番の学生は3番か5番の学生にしか運動服を貸すことができません.運動服がないと授業を受けられないので、適当に運動服を借りて、できるだけ多くの学生に体育の授業をさせなければなりません.
    すべての学生の数n,ジャージを盗まれた学生の番号の並びloss,複数のジャージを持った学生の番号の並びreserveをパラメータとした場合,解関数を書いて体育の授業を受けられる学生の最上位値を返してください.
    せいげんじょうけん
    全生徒数は2名以上30名以下である.
    運動服を盗まれた生徒数は1名以上n名以下で、重複番号はない.
    複数のユニホームを着用した生徒数は1名以上n名以下であり,重複番号はない.
    余分な運動服を持っている学生だけが他の学生に運動服を貸すことができる.
    複数の運動服を持ってきた学生は、運動服が盗まれたのかもしれない.このとき、この学生は1枚の運動服だけが盗まれたと仮定し、1枚の運動服しか残っていないため、他の学生に運動服を貸すことができない.
    /* findIndex 사용 */
    function solution(n, lost, reserve) {
      reserve = reserve.sort((a, b) => a - b);
      lost = lost.sort((a, b) => a - b);
      const newReserve = [...reserve];
      newReserve.map((el) => {
        if (lost.includes(el)) {
          lost.splice(
            lost.findIndex((e) => e === el),
            1
          );
          reserve.splice(
            reserve.findIndex((e) => e === el),
            1
          );
        }
      });
      const newReserve2 = [...reserve];
      newReserve2.map((el) => {
        if (lost.includes(el - 1)) {
          lost.splice(
            lost.findIndex((e) => e === el - 1),
            1
          );
          reserve.splice(
            reserve.findIndex((e) => e === el - 1),
            1
          );
        } else if (lost.includes(el + 1)) {
          lost.splice(
            lost.findIndex((e) => e === el + 1),
            1
          );
          reserve.splice(
            reserve.findIndex((e) => e === el + 1),
            1
          );
        }
      });
      return n - lost.length;
    }
    
    /* indexOf 사용 */
    function solution(n, lost, reserve) {
      const losted = [...lost];
      lost = lost
        .filter((student) => !reserve.includes(student))
        .sort((a, b) => a - b);
      reserve = reserve
        .filter((student) => !losted.includes(student))
        .sort((a, b) => a - b);
    
      let answer = n - lost.length;
      for (let i = 0; i < lost.length; i++) {
        // 내 앞 번호의 학생이 여벌 체육복을 가지고 있는지를 검사
        if (reserve.includes(lost[i] - 1)) {
          reserve.splice(reserve.indexOf(lost[i] - 1), 1);
          answer++;
          // 내 뒤 번호의 학생이 여벌 체육복을 가지고 있는지를 검사
        } else if (reserve.includes(lost[i] + 1)) {
          reserve.splice(reserve.indexOf(lost[i] + 1), 1);
          answer++;
        }
      }
      return answer;
    }
    
    /* reduce 사용 */
    function solution(n, lost, reserve) {
      const losted = [...lost];
      lost = lost
        .filter((student) => !reserve.includes(student))
        .sort((a, b) => a - b);
      reserve = reserve
        .filter((student) => !losted.includes(student))
        .sort((a, b) => a - b);
    
      let answer = n - lost.length;
    
      return lost.reduce((acc, cur) => {
        // 앞에 있는 학생이 여벌 체육복을 가지고 있는지
        const prev = reserve.indexOf(cur - 1);
        // 뒤에 있는 학생이 여벌 체육복을 가지고 있는지
        const next = reserve.indexOf(cur + 1);
    
        if (prev !== -1) {
          // 앞에 있는 학생이 여벌 체육복을 가지고 있는 경우
          reserve.splice(prev, 1);
          acc++;
        } else if (next !== -1) {
          // 뒤에 있는 학생이 여벌 체육복을 가지고 있는 경우
          reserve.splice(next, 1);
          acc++;
        }
        return acc;
      }, answer);
    }