[프로그래머스] 위클리 챌린지(4주차) - "직업군 추천하기" (Java)
https://programmers.co.kr/learn/courses/30/lessons/84325
코딩테스트 연습 - 4주차_직업군 추천하기
개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부
programmers.co.kr
난이도 : Level 1
각 직업군에 맞는 점수를 계산하고 사전순 정렬에 고민할 순 있지만, 크게 난이도가 높은 문제는 아니라고 생각합니다.
저는 다음과 같은 로직으로 문제를 해결하고자 했습니다.
1. Map 자료구조를 활용하여 언어별 점수 저장.
2. Comparator
를 이용하여 사전순 정렬.
3. table
배열을 돌면서 직업군 별 총점 계산.
4. 문자열 split.
5. max
값 갱신.
- static HashMap<String, Integer> map = new HashMap<>();
Key에는 languages 배열의 값을 저장하고, value에는 preference 배열의 값을 저장합니다.
- String solution(String[] table, String[] languages, int[] preference)
setMap()
함수를 통해 Map 자료구조를 설정합니다. Comparator 인터페이스와 compareTo 메소드로 사전순 파라미터로 들어오는 table
배열을 사전순 정렬합니다. 그 다음 table
배열을 돌면서 문자열을 분리하고 그에 따라, 직업군 별 총점을 구합니다. 그리고 총점을 비교하여 max 값을 갱신합니다. 사전순으로 이미 정렬을 해놨기에, max 값이 갱신될 때마다 사전순으로는 뒤로 가게 됩니다.
- int calculate(String split[], int point, int sum)
각 직업군 별 총점을 계산하는 함수입니다. Map 자료구조에 저장되어 있는 언어와 점수를 활용합니다.
-void setMap(String[] languages,int[] preference)
Map 자료 구조를 설정합니다. Key는 선호 언어이고, Value는 언어별 점수입니다.
코드
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
class Solution {
// PM / 84325번 / 위클리 챌린지 / 구현, 정렬 / 4주차
// 선호 언어, 점수 저장
static HashMap<String, Integer> map = new HashMap<>();
public String solution(String[] table, String[] languages, int[] preference) {
String answer = "";
int max = Integer.MIN_VALUE;
setMap(languages, preference);
// 사전순 정렬.
Arrays.sort(table, new Comparator<>() {
@Override
public int compare(String o1, String o2) {
String[] o1_split = o1.split(" ");
String[] o2_split = o2.split(" ");
return o1_split[0].compareTo(o2_split[0]);
}
});
// 각 직업군 별 총점 계산.
for(int i=0; i<table.length; i++) {
String []split = table[i].split(" ");
String part = split[0];
int sum = 0;
int point = 5;
// 총점 계산
sum = calculate(split, point, sum);
if(sum > max) {
max = sum;
answer = part;
}
}
return answer;
}
public int calculate(String split[], int point, int sum) {
for(int j=1; j<split.length; j++) {
String lang = split[j];
if(map.containsKey(lang)) {
sum += (point * map.get(lang));
}
point--;
}
return sum;
}
public void setMap(String[] languages,int[] preference) {
for(int i=0; i<languages.length; i++) {
map.put(languages[i], preference[i]);
}
}
}
피드백 환영합니다.
'문제 풀이 > Java' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지(6주차) - "복서 정렬하기" (Java) (0) | 2021.09.17 |
---|---|
[프로그래머스] 위클리 챌린지(5주차) - "모음 사전" (Java) (0) | 2021.09.15 |
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT - "자물쇠와 열쇠" (Java) (0) | 2021.09.10 |
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT - "문자열 압축" (Java) (0) | 2021.09.08 |
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT - "괄호 변환" (Java) (0) | 2021.09.07 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스] 위클리 챌린지(6주차) - "복서 정렬하기" (Java)
[프로그래머스] 위클리 챌린지(6주차) - "복서 정렬하기" (Java)
2021.09.17 -
[프로그래머스] 위클리 챌린지(5주차) - "모음 사전" (Java)
[프로그래머스] 위클리 챌린지(5주차) - "모음 사전" (Java)
2021.09.15 -
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT - "자물쇠와 열쇠" (Java)
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT - "자물쇠와 열쇠" (Java)
2021.09.10 -
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT - "문자열 압축" (Java)
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT - "문자열 압축" (Java)
2021.09.08