레벨1 체육복

이성훈·2021년 11월 2일
0

알고리즘

목록 보기
10/12

문제

풀이

function solution(n, lost, reserve) {
  // n === 전체학생수
  // lost === 체육복을 도난당한 학생들의 번호가 담긴 배열
  // reserver === 여벌의 체육복을 가진 학생들의 번호가 담긴 배열
  // answer === 체육수업을 들을 수 있는 학생의 최대값
  let answer = n - lost.length;
  // .solution(7, [2, 3, 4], [1, 2, 3, 6]); 중복 제거
  // // 체육복을 잃어버렸으면서 여벌이 없는 경우
  lost = lost.filter((element) => !reserve.includes(element));

  // // 여벌이 있으면서 체육복을 잃어버리지 않은 경우
  reserve = reserve.filter((element) => !lost.includes(element));

  for (let i = 0; i < lost.length; i++) {
    if (reserve.includes(lost[i] - 1)) {
      answer++;
      reserve.splice(reserve.indexOf(lost[i] - 1), 1);
    } else if (reserve.includes(lost[i] + 1)) {
      answer++;
      reserve.splice(reserve.indexOf(lost[i] + 1), 1);
    }
  }

  return answer;
}

다시 풀었는데 실패했다 테스트코드 4개가 통과가 안된다 ㅋㅋㅋ

function solution(n, lost, reserve) {
    let answer = 0;
    const allArr = [];
    
    for(let i=0; i<n; i++) {
        allArr.push(1);
    }
    
    for(let i of lost) {
        allArr[i-1] -= 1;
    }
    
    for(let i of reserve) {
        allArr[i-1] += 1;
    }
    
    for(let i=0; i<n; i++) {
        if(allArr[i] === 0) {
            if(allArr[i+1] === 2) {
              allArr[i+1] -= 1;
              allArr[i] += 1;
              lost.unshift();
              reserve.unshift();
            } else if(allArr[i-1] === 2) {
              allArr[i-1] -= 1;
              allArr[i] += 1;
              reserve.unshift();
              lost.unshift();
            } 
        }
    }
       
    for(let i=0; i<allArr.length; i++) {
        if(allArr[i] !== 0) {
            answer++;
        }
    }
    
    return answer;
}

profile
블로그 이전중입니다 => https://kusdsuna.tistory.com/

0개의 댓글