기록

[Weekly Challenge 2021.08.23 ~ 2021.08.29] 4주차 직업군 추천하기 본문

Algorithm/Programmers

[Weekly Challenge 2021.08.23 ~ 2021.08.29] 4주차 직업군 추천하기

dev.jung 2021. 9. 1. 15:21

문제

 

입출력 예

 

풀이

languagesList ->  받아온 table에서 직업군별 언어 리스트를 반환하는 함수.
5점 언어부터를 1점부터로 reverse 시켜서 반환.

split으로 array 배열로 만들어준후 shift로 첫번째 인덱스인 직업군을 제외시켜서 반환

jobScore -> 각 직업군별 언어선호도 * 언어점수를 반환하는 함수

개발자가 사용하는 언어가 직업군별 언어리스트에 있을경우 연산한 점수를 반환한다.


indexJob -> 점수가 가장높은 직업군의 인덱스를 구하는 함수 2개 이상일 수 있기때문에 배열로 반환했다.

map을 이용해 현재값이 최대값인지 판별 후 현재 인덱스를 반환하고, 반환하지 않으면 undefined가 반환되기 때문에 filter로 undefined를 거르고 반환한다.


resultJob -> 점수가 가장높은 직업군을 반환하는 함수.

점수가 가장높은 직업군의 인덱스를 가지고 직업군을반환한다.
2개이상일시 사전 순으로 반환해야하기때문에 jobArray를 sort() 시켜준뒤 첫인덱스를 반환한다.


solution -> 만든 함수들로 최종결과값을 반환

 

function languagesList(table) {
    const array = table.split(' ');
    array.shift();
    
    return array.reverse();
}

function jobScore(list, languages, preference) {
    const length = languages.length;
    let score = 0;
    
    for (let i = 0; i < length; i++) {
        if (list.indexOf(languages[i]) >= 0) {
            score += (list.indexOf(languages[i]) + 1) * preference[i]; 
        }   
    }

    return score;
}

function indexJob(scoreList) {
    const scoreMap = scoreList.map((cur, idx) => {
        if (cur === Math.max.apply(null, scoreList)) {
            return idx;
        }
    }).filter(cur => cur !== undefined);

    return scoreMap;
}

function resultJob(indexArray, table) {
    const length = indexArray.length;
    const jobArray = [];
    
    for (let i = 0; i < length; i++) {
        jobArray.push(table[indexArray[i]].split(' ')[0]);
    } 
    
    jobArray.sort();

    return jobArray[0];
}

function solution(table, languages, preference) {
    const tableLength = table.length;
    const scoreList = [];
    let indexArray;
    
    for (let i = 0; i < tableLength; i++) {
        scoreList.push(jobScore(languagesList(table[i]), languages, preference))
    }
    
    indexArray = indexJob(scoreList); 
    
    return resultJob(indexArray, table);
}
반응형
Comments