[Programmers] 할인 행사 - JavaScript

Joosi_Cool·2023년 3월 5일
1

Programmers

목록 보기
33/98
post-thumbnail

문제설명



설계 과정

  1. discount를 10개씩 자른다.
  2. 이 자른 것을 하나씩 체크
    -> want에 있다면, num[want의 인덱스]를 찾아 1을 빼준다. (이때 단, num은 얕은 복사를 통해 하나 만들어둔다, 이후에도 써야되기 때문)
  3. 그 후에 얕은 복사를 통해 만든 num에 값 중에 모두 0 이하이면 answer++


풀이 코드

function solution(want, number, discount) {
    var answer = 0;
    var exNumber;
    var disCountArr;
    for(var i = 0;i<discount.length-9;i++){
        //10개 마다 짜르기
        disCountArr = discount.slice(i,i+10);
        //number를 계속 초기화(얕은 복사)
        exNumber = [...number];
        disCountArr.forEach((element)=>{
            //want에 그 값이 있다면
            if(want.indexOf(element)!==-1){
                exNumber[want.indexOf(element)]--;
            }
        })
      //값 중에 0이 있는지 확인 하는 변수 true=> 모두 0이하, false=> 0보다 큰 값이 있음.
        var check = true;
        exNumber.forEach((element)=>{
           //남아 있다면
            if(element>0){
                check = false;
            }
        })
        //모든 값이 0 이하라면,
        if(check===true){
            answer++;
      
        }
    }
    return answer;
}


결과

이 문제는 쉽게 풀어냈지만 처음에 얕은 복사를 하지 않아 문제가 틀렸다. 깊은 복사로 인해 값이 중복으로 빼지는 현상이 발생했고, 이러한 복사 부분을 고려해야 된다는 것을 다시 한번 상기 시켜주는 문제였다.

profile
집돌이 FE개발자의 노트

0개의 댓글