프로그래머스(Java) - 직업군 추천하기(위클리 챌린지 4주차)
문제 링크
문제 풀이
직업군과 그 직업군에서 사용하는 언어별로 받는 점수가 다르다.
그래서 직업군을 key값으로 하고 value를 map으로 받으며
그 map의 key는 언어, value를 점수로 가지는
Map<String, Map<String,Integer>>를 사용한다면 쉽게 접근할 수 있을것이라고 생각했다.
map에 원하는 형태로 값들이 저장된다면
이제 점수를 구해줘야한다.
점수를 구하기 위해서 각 직업군에 해당 언어가 포함되어있는지를 체크하고, 포함되어 되지 않으면 0점, 포함되어있다면 가산점을 더해서 점수를 구한다.
코드
import java.util.*;
class TotalScore implements Comparable<TotalScore> {
//직업군과, 점수
String field;
int score;
public TotalScore(String field, int score){
this.field = field;
this.score = score;
}
//점수에 따라서 내림차순, 이름에 따라서 오름차순
public int compareTo(TotalScore o){
if(score - o.score>0){
return -1;
}else if(score-o.score<0){
return 1;
}else{
if(field.compareTo(o.field)>0){
return 1;
}else{
return -1;
}
}
}
}
class Solution {
public String solution(String[] table, String[] languages, int[] preference) {
String answer = "";
Map<String,Map<String,Integer>>map = new HashMap();
//직업군
String [] industry = new String[table.length];
for(int i=0; i<table.length; i++){
String [] array = table[i].split(" ");
industry[i] = array[0];
Map<String,Integer>tempMap = new HashMap();
int idx = table.length;
for(int j=1; j<array.length;j++){
tempMap.put(array[j],Math.max(idx--,0));
}
map.put(array[0],tempMap);
}
List<TotalScore> list = new ArrayList();
for(int i=0; i<industry.length; i++){
int sum = 0;
for(int j=0; j<languages.length; j++){
if(map.get(industry[i]).containsKey(languages[j])){
sum += map.get(industry[i]).get(languages[j])*preference[j];
}else{
sum +=0;
}
}
list.add(new TotalScore(industry[i],sum));
}
//조건에 따라 정렬
Collections.sort(list);
//조건에 부합하는 값은 리스트의 0번째 값이므로, 그 값의 직업군 return
return list.get(0).field;
}
}
Author And Source
이 문제에 관하여(프로그래머스(Java) - 직업군 추천하기(위클리 챌린지 4주차)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@courage331/프로그래머스Java-직업군-추천하기위클리-챌린지-4주차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)