개발자가 사용하는 언어와 언어 선호도
를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다.
아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수
를 부여한 표입니다.
예를 들면, SQL의 SI 직업군 언어 점수
는 3점이지만 CONTENTS 직업군 언어 점수
는 2점입니다. SQL의 HARDWARE, PORTAL, GAME 직업군 언어 점수
는 0점입니다.
직업군 언어 점수
를 정리한 문자열 배열 table
, 개발자가 사용하는 언어를 담은 문자열 배열 languages
, 언어 선호도를 담은 정수 배열 preference
가 매개변수로 주어집니다. 개발자가 사용하는 언어의 언어 선호도
x 직업군 언어 점수
의 총합이 가장 높은 직업군을 return 하도록 solution 함수를 완성해주세요. 총합이 같은 직업군이 여러 개일 경우, 이름이 사전 순으로 가장 빠른 직업군을 return 해주세요.
import java.util.*;
class Solution {
public String solution(String[] table, String[] languages, int[] preference) {
String answer = "";
Map<String, Integer> langPreMap = new HashMap<>();
Map<String, ArrayList<Info>> coreMap = new HashMap<>();
for (int i = 0; i < languages.length; i++) {
langPreMap.put(languages[i], preference[i]);
}
for (String line : table) {
String[] lineSplit = line.split(" ");
String job = lineSplit[0];
for (int i = 1; i < lineSplit.length; i++) {
if (!coreMap.containsKey(job)) {
coreMap.put(job, new ArrayList<>());
}
coreMap.get(job).add(new Info(lineSplit[i], 6 - i));
}
}
List<Info> answerList = new ArrayList<>();
for (String line : table) {
String[] lineS = line.split(" ");
String job = lineS[0];
int pointSum = 0;
ArrayList<Info> infos = coreMap.get(job);
for (int i = 0; i < infos.size(); i++) {
Info info = infos.get(i);
if (langPreMap.containsKey(info.lang)) {
pointSum += langPreMap.get(info.lang) * info.point;
}
}
answerList.add(new Info(job, pointSum));
}
Collections.sort(answerList, (o1, o2) -> {
if (o1.point == o2.point) {
return o1.lang.compareTo(o2.lang);
}
return o2.point - o1.point;
});
answer = answerList.get(0).lang;
return answer;
}
private static class Info {
String lang;
int point;
public Info(String lang, int point) {
this.lang = lang;
this.point = point;
}
}
}
HashMap
의 전형적인 문제 형태.Sort
.