[프로그래머스 lev1/JS] 체육복

woolee의 기록보관소·2022년 11월 8일
0

알고리즘 문제풀이

목록 보기
67/178

문제 출처

프로그래머스 lev1 - 체육복

문제

나의 풀이

function solution(n, lost, reserve) {
  const stu = new Array(n+1).fill(1);
  
  for (let i=0; i<reserve.length; i++) {
    stu[reserve[i]]++;
  }
  for (let i=0; i<lost.length; i++) {
    stu[lost[i]]--;
  }
  
  let answer=0;

  for (let i=1; i<stu.length; i++) {
    if (stu[i]===0) {
      if (stu[i-1] >= 2) {
        stu[i]++;
        stu[i-1]--;
        answer++;
      }
      else if (stu[i+1] >= 2) {
        stu[i]++;
        stu[i+1]--;
        answer++;
      }
    }
    else {
      answer++;
    }
  }
  return answer; 
}

console.log(solution(5, [2, 4], [1, 3, 5]));

다른 풀이

Array.prototype.find() ⇒ 주어진 판별 함수를 만족하는 첫번째 요소 반환
Math.abs() ⇒ 절대값

return true 라는게 그 우리가 완전 탐색에서 return; 하듯이 만족 안 하면 넘긴다는 의미인듯. 즉, 뺀 값이 1인 애들만 고려할 건데, 그게 아니면 그냥 넘긴다. (return true)

function solution(n, lost, reserve) {      
    return n - lost.filter(a => {
        const b = reserve.find(r => Math.abs(r-a) <= /* == 로 바꿔야 되나? */ 1)
        if(!b) return true
        reserve = reserve.filter(r => r !== b)
    }).length
}

Array.prototype.findIndex() ⇒ 주어진 판별 함수를 만족하는 첫번째 요소의 인덱스 반환. 체육복 풀이

function lostFilter(lost, reserve, findT) {
  const filterT = { me: true, friend: false };

  return lost.filter(lostN => {
    const existI = reserve.findIndex(reserveN => filterT[findT]
                                               ? reserveN === lostN
                                               : Math.abs(reserveN - lostN) <= 1);
    if(existI === -1) return true;
    reserve.splice(existI, 1);
  });
}

function solution(n, lost, reserve) {
  const selfLost = lostFilter(lost,     reserve, 'me'    );
  const realLost = lostFilter(selfLost, reserve, 'friend');

  return n - realLost.length;
}
function solution(n, lost, reserve) {
    const students = {};
    let answer = 0;
    for(let i = 1; i <= n; i++){
        students[i] = 1;
    }
    lost.forEach(number => students[number] -= 1);
    reserve.forEach(number => students[number] += 1);

    for(let i = 1; i <= n; i++){
        if(students[i] === 2 && students[i-1] === 0){
                students[i-1]++;
                students[i]--;
        } else if(students[i] === 2 && students[i+1] === 0){
                students[i+1]++;
                students[i]--;
        }
    }
    for(let key in students){
        if(students[key] >= 1){
            answer++;
        }
    }
    return answer;
}
profile
https://medium.com/@wooleejaan

0개의 댓글