https://school.programmers.co.kr/learn/courses/30/lessons/42578?language=javascript 

 

프로그래머스

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

programmers.co.kr

function factorial(n) {
    if(n === 0) return 1;
    let result = 1;
    for(let i = 1 ; i <= n ; i++) {
        result *= i;
    }
    
    return result;
}

function perm(n,m) {
    let n_ = factorial(n);
    let m_ = factorial(m);
    let n_m = factorial(n-m);
    
    return n_/(m_*n_m);
}

function solution(clothes) {
    var answer = 1;
    let typeNumber = 0;
    const hash = {};
    
    clothes.forEach((c) => {
        if(hash[c[1]] === undefined) {
            hash[c[1]] = 1; 
            typeNumber++;
        }
        else hash[c[1]] += 1;
    });
    
    // 종류 1가지
    if(typeNumber === 1) return clothes.length;
    
    const keys = Object.keys(hash);

    keys.forEach((k) => {
       answer *= (perm(hash[k], 1) + perm(hash[k], 0));
    });
    
    return answer -1;
}
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/1845?language=javascript 

 

프로그래머스

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

programmers.co.kr

function solution(nums) {
    const hash = {};
    
    nums.forEach((n) => {
        if(hash[n] === undefined) hash[n] = 1;
        else hash[n] += 1;
    });
    
    const M = nums.length/2;
    const keyList = Object.keys(hash);

    return M >= keyList.length ? keyList.length : M;
}
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=javascript 

 

프로그래머스

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

programmers.co.kr

function solution(bridge_length, weight, truck_weights) {
    const bridge = new Array(bridge_length).fill().map((v) => 0);
    
    let time = 0;
    let bridge_weight = 0
    let truck_number = truck_weights.length;
    
    while(truck_number > 0) {
        // console.log(bridge, time);
        time++;
        bridge_weight = bridge.reduce((partialSum, a) => partialSum + a, 0);
        if(bridge_weight <= weight
           && bridge_weight + truck_weights[0] <= weight) {
            let b = bridge.shift();
            if(b > 0) truck_number--;
            bridge.push(truck_weights.shift());
        } else if(bridge_weight <= weight 
                 && bridge_weight + truck_weights[0] > weight) {
            let b = bridge.shift();
            if(b > 0) truck_number--;
            bridge_weight = bridge.reduce((partialSum, a) => partialSum + a, 0);
            if(bridge_weight <= weight 
                 && bridge_weight + truck_weights[0] <= weight) {
                bridge.push(truck_weights.shift());
            } else bridge.push(0);
        } else if(bridge_weight <= weight && truck_weights.length === 0){
            let b = bridge.shift();
            if(b > 0) truck_number--;
            bridge.push(0);
        }
    }
        
    return time;
}

코드가 많이 지저분하다..

728x90

코딩테스트 연습 - 기능개발

 

프로그래머스

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

programmers.co.kr

function solution(progresses, speeds) {
    let days = []; 
    const answer = [];
    for(let i = 0 ; i < progresses.length ; i++) {
        const calc = Math.ceil((100-progresses[i])/(speeds[i]));
        days.push(calc);
        // days.push(Math.round((100-progresses[i])/speeds[i]));
    }
    
    let today = days[0];
    let cnt = 0;
    days.forEach((d) => {
        if(d <= today) {
            cnt++;
        } else {
            answer.push(cnt);
            cnt = 1;
            today = d;
        }
    });
        
    answer.push(cnt);
    
    return answer;
}
728x90

+ Recent posts