본문 바로가기

PROGRAMMING/ALGORITHM

[프로그래머스] 위클리 챌린지 4주차

https://programmers.co.kr/learn/courses/30/lessons/84325

 

코딩테스트 연습 - 4주차

개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부

programmers.co.kr

 

문제 요약 

각 직군 별 스킬에 대한 점수가 있는데

내 스킬이 어느 직군에서 가장 높은 점수를 갖는지 출력하면 된다.

점수가 동일한 직군이 2개 이상일 땐 사전순으로 가장 앞에오는 직군을 출력한다.

 

풀이 방법

직군과 직군별 나의 스킬점수는 map으로

Input으로 받는 테이블은 Map<직군 : Map<스킬, 점수>> 로 구현했다.

 

동점일 때 사전순으로 맨앞의 직군을 출력하는 부분은,

최고점인 직군을 선택하는 for문을 돌릴 keySet을 사전 역순으로 정렬하여

사전에서 가장 앞에오는 직군을 맨 뒤로 보냈다.

 

소스코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;

class Solution {
    public String solution(String[] tables, String[] languages, int[] preference) {
        String answer = "";
        HashMap<String, Integer> category = new HashMap<>();
        int[] categoryScore = new int[tables.length];
        HashMap<String, HashMap<String, Integer>> list = new HashMap<>();
        int cnt = 0;

        for(String table : tables){
            String[] str = table.split(" ");
            category.put(str[0],0);
            HashMap<String, Integer> temp = new HashMap<>();
            for(int i=1; i<str.length; i++){
                temp.put(str[i], str.length - i);
            }
            list.put(str[0], temp);
            cnt++;
        }

        cnt = 0;
        for(String language : languages){
            Object[] keys = list.keySet().toArray();
            for(Object key : keys){
                HashMap<String, Integer> score = list.get(key);
                if(score.containsKey(language)){
                    int temp = category.get(key);
                    category.replace(key.toString(), temp, temp+ preference[cnt] * score.get(language));
                }
            }
            cnt++;
        }

        int max =0;
        Object[] mapKey = category.keySet().toArray();
        Arrays.sort(mapKey, Collections.reverseOrder());
        for(Object key : mapKey){
            if(max <= category.get(key)){
                max = category.get(key);
                answer = key.toString();
            }
        }

        return answer;
    }
}