DevLog:-)

[프로그래머스][Javascript]할인행사 본문

알고리즘/프로그래머스

[프로그래머스][Javascript]할인행사

hyeon200 2023. 7. 26. 20:14
반응형

문제

할인 행사

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코드

function solution(want, number, discount) {
    var answer = 0;
    let data=[];
    let check = 0;
    let count =0;
    
    for(let i in want){
        data[want[i]] = number[i];
    } //want배열과 number배열의 값을 object형태로 data에 담음
   
    for(let i in discount){
        let d =[];
        let n_d = discount.slice(i,parseInt(i)+10); //(for i in 문자열) 에서 나오는 i는 문자열임을 주의하자 '1' + 10 = '110'
        for(let j of n_d){
            d[j] = (d[j]||0)+1;    
        }
        check = 1;
        for(let j in data){
            //console.log(d.inclues(j));-> undefined //arr.includes('a')에서 a는 인덱스가 아닌 요소 값을 말함을 주의히자 인덱스 값의 여부는 알 수 없음 
            if( !d[j] || data[j] > d[j]){check =0;break;}
        }
        if(check ==1){count++;}
    }
    
    return count;
}

 

✅checkpoint!

for(let i in arr)에서 i의 타입은? 문자이다! 숫자 계산을 할 때 parseInt()를 하자
object arr = { a:b}
-arr인덱스에  a가 있는 지 확인 
-arr요소에 b가 있는 지 확인
-if(arr[a]){}
-if(arr.includes(b))

 

 

📖다른 풀이

function solution(want, number, discount) {
    let count = 0;
    for (let i = 0; i < discount.length - 9; i++) { //discount.length - 9 10개보다 적게 남는 경우 제외(시간 절약을 할 수 있음)
        const slice = discount.slice(i, i+10);

        let flag = true;
        for (let j = 0; j < want.length; j++) {
            if (slice.filter(item => item === want[j]).length !== number[j]) {
                flag = false;
                break;
            }
        }
        if (flag) count += 1;
    }
    return count;
}
반응형