프로그래머스 체육복 자바스크립트 풀이

» JavaScript

체육복

문제

https://programmers.co.kr/learn/courses/30/lessons/42862

코드

function solution(n, lost, reserve) {
  let answer = 0; // 이것은 답이구여
  let arr = []; // 이것은 체육복 배열 값입니다

  // 초기세팅
  for (let i = 1; i <= n; i++) {
    arr.push(1); // 우선 체육복을 한개씩 뿌림
    // reserve에 포함된 값 찾기
    if (reserve.includes(i)) {
      arr[i - 1]++; // 체육복 한 벌 더주기
    }

    // 잃어버린 애 찾기
    if (lost.includes(i)) {
      arr[i - 1]--; // 체육복 한 벌 뺏기
    }
  }

  // 체육복 빌려줄타이밍
  for (let i = 0; i < n; i++) {
    // 만약 체육복이 없는 애라면
    if (arr[i] === 0) {
      // 없는애 앞에가 여벌이 있다면
      if (arr[i - 1] === 2) {
        arr[i]++; // 체육복 빌림 ㅎㅎ
        arr[i - 1]--; // 체육복 빌려줌
      }

      // 뒤에 있는애가 여벌이 있다면?
      if (arr[i + 1] === 2) {
        arr[i]++; // 체육볼 빌려버렸구여?
        arr[i + 1]--; // 빌려줘버렸어요
      }
    }
  }

  for (let i = 0; i < n; i++) {
    // 체육복 있는 놈들 다 찾을거니깐 1보다 큰놈 옥땅으로 따라와
    if (arr[i] >= 1) {
      answer++; // answer에 1씩 추가요~
    }
  }

  return answer;
}

풀이

도저히 안풀려서 블로그 보고 찾은것중 해설이 괜찮은거 지멋대로 풀어보겠습니다

누가누가 체육복이 없고 여벌이 있는지 배열로 만들어주기 위해서 일단 모든 학생 n만큼 체육복을 한벌씩 줄겁니다

includes를 사용해서 몇번째 학생이 lost와 reserve에 포함되어 있는지 찾을거에요

찾은 애들이 lost라면 체육복을 주고(+1) reserve라면 빼줄거에요(-1)

그런 다음 전체 arr에서 체육복이 있는 친구들(1 이상)이 있을때마다 answer을 1씩 증가시키면 됩니당