본문 바로가기
Web development/Algorithm

[프로그래머스] 직업군 추천하기 (javascript)

by 자몬다 2021. 8. 23.

직업군별 선호 언어 문자열 배열(table)과, 내 언어 스택 배열(languages), 선호도(preference)를 입력받아

가장 적합한 직업군을 리턴하는 문제이다.

 

우선 직업군별 선호 언어 문자열 배열(table)이 별로 아름답지 못하게 입력되어 있기 때문에 갈무리가 필요하다.

 

추후 직업군별 점수 산출이 필요하기 때문에, 언어별로 어떤 직업군에 몇점인지로 정리했다.

tables = ["SI JAVA JAVASCRIPT SQL PYTHON C#", "CONTENTS JAVASCRIPT JAVA PYTHON SQL C++", "HARDWARE C C++ PYTHON JAVA JAVASCRIPT", "PORTAL JAVA JAVASCRIPT PYTHON KOTLIN PHP", "GAME C++ C# JAVASCRIPT C JAVA"]
const lanScore = getLanScore(table);

// 정리된 lanScore
    // {
    //     JAVA: { SI: 5, CONTENTS: 4, HARDWARE: 2, PORTAL: 5, GAME: 1 },
    //     JAVASCRIPT: { SI: 4, CONTENTS: 5, HARDWARE: 1, PORTAL: 4, GAME: 3 },
    //     SQL: { SI: 3, CONTENTS: 2 },
    //     PYTHON: { SI: 2, CONTENTS: 3, HARDWARE: 3, PORTAL: 3 },
    //     'C#': { SI: 1, GAME: 4 },
    //     'C++': { CONTENTS: 1, HARDWARE: 4, GAME: 5 },
    //     C: { HARDWARE: 5, GAME: 2 },
    //     KOTLIN: { PORTAL: 2 },
    //     PHP: { PORTAL: 1 }
    // }

function getLanScore(table){
    const result = {};
    for(let l of table){
        const arr = l.split(' ');
        for(let i = 1; i < 6; i++){
            if(!result[arr[i]]) result[arr[i]] = {};
            result[arr[i]][arr[0]] = 6-i;
        }
    }
    return result;
}

 

그후 직군별 abc순으로 최종 점수를 담을 배열을 만든다.

const scores = [0, 0, 0, 0, 0] // CONTENTS, GAME, HARDWARE, PORTAL, SI의 점수를 담을 것이다.

 

languages/preference 반복을 돌며 점수를 계산해 더해준다.

CONTENTS의 점수라면 scores[0]에 담는 식으로..

 

이후 Max값의 index를 찾아 그에 맞는 직군명을 리턴하면 된다.

 

전체 코드

function solution(table, languages, preference) {
    const lanScore = getLanScore(table);

    // 직군명 오름차순으로 점수를 담음
    const scores = [0,0,0,0,0];
    for(let i in languages){
        const s = lanScore[languages[i]];//{ SI: 2, CONTENTS: 3, HARDWARE: 3, PORTAL: 3 }
        scores[0] += s.CONTENTS ? s.CONTENTS * preference[i] : 0;
        scores[1] += s.GAME ? s.GAME * preference[i] : 0;
        scores[2] += s.HARDWARE ? s.HARDWARE * preference[i] : 0;
        scores[3] += s.PORTAL ? s.PORTAL * preference[i] : 0;
        scores[4] += s.SI ? s.SI * preference[i] : 0;
    }
    
    const index = scores.indexOf(Math.max(...scores));
    const jobName = {
        0: 'CONTENTS',
        1: 'GAME',
        2: 'HARDWARE',
        3: 'PORTAL',
        4: 'SI'
    }
    return jobName[index];
}
function getLanScore(table){
    const result = {};
    for(let l of table){
        const arr = l.split(' ');
        for(let i = 1; i < 6; i++){
            if(!result[arr[i]]) result[arr[i]] = {};
            result[arr[i]][arr[0]] = 6-i;
        }
    }

    return result;
}

 

 

 

 

 

풀어보러 가기 : https://programmers.co.kr/learn/courses/30/lessons/84325

댓글