반응형

 

(월요일 11시 예약 발행..!)

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

** Javascript

 

1)

 

function solution(table, languages, preference) {
    const data = table.reduce((obj, row) => {
        let sources = row.split(" ");
        const dept = sources.shift();
        obj[dept] = obj[dept] || ["", ...sources.reverse()];
        return obj;
    }, {});
    let sumArr = [];
    for (const scores of Object.values(data)) {
        let sum = 0;
        for (let i = 0; i < languages.length; i++) {
            const index = scores.findIndex((lang) => lang === languages[i]);
            sum += (index > 0) ? index * preference[i] : 0;
        }
        sumArr.push(sum);
    }
    return sumArr.reduce((acc, curr, index) => {
        if (curr >= Math.max.apply(null, sumArr) && Object.keys(data)[index] <= acc) acc = Object.keys(data)[index];
        return acc;
    }, "z");    
}

 

 

첫 풀이는 이랬는데 아무래도 languages 중에 z 로 시작되는 거는 포함이 안될 것 같아서 아래 풀이로 바꿨다.

제출은 1번풀이로 되어 있다.

 

 

2)

 

function solution(table, languages, preference) {
    const data = table.reduce((obj, row) => {
        let sources = row.split(" ");
        const dept = sources.shift();
        obj[dept] = obj[dept] || ["", ...sources.reverse()];
        return obj;
    }, {});
    let sumArr = [];
    for (const scores of Object.values(data)) {
        let sum = 0;
        for (let i = 0; i < languages.length; i++) {
            const index = scores.findIndex((lang) => lang === languages[i]);
            sum += (index > 0) ? index * preference[i] : 0;
        }
        sumArr.push(sum);
    }
    return sumArr.reduce((acc, curr, index) => {
        if (curr >= Math.max.apply(null, sumArr)) acc.push(Object.keys(data)[index]);
        return acc;
    }, []).sort()[0];
}

 

 

 

 

반응형

+ Recent posts