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;
}
}'PROGRAMMING > ALGORITHM' 카테고리의 다른 글
| [ALGORITHM] Two Pointers Algorithm (0) | 2021.11.10 |
|---|---|
| [프로그래머스] 위클리 챌린지 5주차 (0) | 2021.09.04 |
| [백준] 9663번 N-Queen JAVA 백트래킹 (0) | 2021.08.17 |
| [프로그래머스] 위클리 챌린지 2주차 (0) | 2021.08.10 |
| [프로그래머스] 위클리 챌린지 1주차 (0) | 2021.08.04 |