프로그래머스 위클리 챌린지 4주차
2021. 9. 2. 12:25ㆍCodingTest
문제
https://programmers.co.kr/learn/courses/30/lessons/84325
문제요약
1. 개발자가 사용하는 언어와 언어에 대한 선호도를 입력으로 하여 해당 개발자의 추천 직업군을 매칭시켜 줍니다.
2. 추천 직업군의 기준은 개발자가 사용하는 언어의 언어선호도*직업군 언어 점수의 총합이 가장 높은 직업군입니다.
소스코드
import java.util.HashMap;
import java.util.Map;
class Solution {
static class Table{
// key : 직업군, value : 직업군에 대한 언어 기준 map
Map<String, Map<String,Integer>> map = new HashMap<String, Map<String,Integer>>();
public Table(String[] table)
{
String[] str = null; // str : ["직업군", "5점언어", "4점언어", ... , "1점언어"]
for(String t : table)
{
str = t.split(" ");
String job = str[0]; // 직업군
Map<String,Integer> dummy = new HashMap<String, Integer>(); // 직업군에 대한 언어 기준 map
// 각각의 언어에 대한 점수 삽입 (5점 ~ 1점 순서)
for(int i=1;i<str.length;i++)
{
dummy.put(str[i], str.length-i);
}
map.put(job, dummy);
}
}
// 참여자에 대한 추천 직업군 매칭
public String getRecommandJob(Participant p) {
int maxScore = 0; // 최고 점수
String recommandJob = ""; // 추천 직업군
for(String job : map.keySet())
{
int sum = 0;
for(String lang : p.lang_map.keySet())
{
sum += ((map.get(job).containsKey(lang) ?
map.get(job).get(lang) : 0)
* p.lang_map.get(lang));
}
// 점수 총합이 최고점수와 동일하고 recommandJob이 job보다 사전순으로 낮은경우
if(sum==maxScore && recommandJob.compareTo(job)>0)
{
recommandJob = job;
}
else if(sum>maxScore)
{
maxScore = sum;
recommandJob = job;
}
}
return recommandJob;
}
}
static class Participant{
Map<String,Integer> lang_map = new HashMap<>(); // key : 사용언어, value : 언어 선호도 점수
public Participant(String[] languages, int[] preference)
{
// 사용언어에 대한 언어 선호도 값 저장
for(int i=0;i<languages.length;i++)
{
lang_map.put(languages[i], preference[i]);
}
}
}
public String solution(String[] table, String[] languages, int[] preference) {
Participant p = new Participant(languages, preference); // 참여자 정보 초기화
Table t = new Table(table); // 직업군 추천 테이블 초기화
return t.getRecommandJob(p); // 참여자에 대한 직업군 추천
}
}
'CodingTest' 카테고리의 다른 글
프로그래머스 위클리 챌린지 6주차 (0) | 2021.09.08 |
---|---|
백준 11726, 2 x n 타일링 (0) | 2021.09.06 |
프로그래머스 위클리 챌린지 2주차 (0) | 2021.09.01 |
백준 10987, 모음의 개수 (0) | 2021.08.16 |
백준(Backjoon) 9625, BABBA (0) | 2021.07.23 |