프로그래머스 : 체육복

KHW·2022년 1월 6일
0

코딩테스트

목록 보기
14/17
post-custom-banner

문제

100/100
1시간 이상 소요

처음 기존에 있던 lost reserve를 순회하며
splice를 사용하려 했지만
lost.map안의 lost를 splice하면 순회하면서 제대로된 결과를 상상하기 어렵기에
고민하다 생각한 방법은 새로운 배열안에 각각의 객체로 만드는 것이다.

내가 작성한 코드

function solution(n, lost, reserve) {
  // 체육복을 빌리는 사람과 잃어버린 사람간의 객체로 값을 가진 배열 생성
  const reserveCheck = reserve
    .sort((a, b) => a - b)
    .map((reserveStudent) => {
      return { isBorrowed: false, borrowStudentIdx: reserveStudent };
    });
  const lostCheck = lost
    .sort((a, b) => a - b)
    .map((lostStudent) => {
      return { isBorrowed: false, borrowStudentIdx: lostStudent };
    });

  // 여분이 있는 학생이 도난을 당했을때
  lostCheck.map((lostStudent, idx) => {
    if (reserve.indexOf(lostStudent.borrowStudentIdx) > -1) {
      lostCheck[idx].isBorrowed = true;
      reserveCheck[
        reserve.indexOf(lostStudent.borrowStudentIdx)
      ].isBorrowed = true;
    }
  });

  // 여분이 없는 학생이 도난을 당했을때
  lostCheck.map((lostStudent, idx) => {
    if (!lostStudent.isBorrowed) {
      //앞번호 학생이 여분을 가지고 있고 아직 빌리지 않았을 때
      if (
        reserve.indexOf(lostStudent.borrowStudentIdx - 1) > -1 &&
        !reserveCheck[reserve.indexOf(lostStudent.borrowStudentIdx - 1)]
          .isBorrowed
      ) {
        lostCheck[idx].isBorrowed = true;
        reserveCheck[
          reserve.indexOf(lostStudent.borrowStudentIdx - 1)
        ].isBorrowed = true;
      }
      //뒷번호 학생이 여분을 가지고 있고 아직 빌리지 않았을 때
      else if (
        reserve.indexOf(lostStudent.borrowStudentIdx + 1) > -1 &&
        !reserveCheck[reserve.indexOf(lostStudent.borrowStudentIdx + 1)]
          .isBorrowed
      ) {
        lostCheck[idx].isBorrowed = true;
        reserveCheck[
          reserve.indexOf(lostStudent.borrowStudentIdx + 1)
        ].isBorrowed = true;
      }
    }
  });

  let borrowCount = 0;
  lostCheck.map((lostStudent) => {
    if (lostStudent.isBorrowed) borrowCount++;
  });
  return n - lost.length + borrowCount;
}
profile
나의 하루를 가능한 기억하고 즐기고 후회하지말자
post-custom-banner

0개의 댓글