Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- homebrew
- livedata
- Algorithm
- programmers
- IntelliJ
- Database
- androidstudio
- Kotlin
- Room
- github
- rxjava
- Java
- library
- git
- FRAGMENT
- Java8
- Jetpack
- Android
- ViewModel
- leetcode
- sourcetree
- ReactiveProgramming
- Version
Archives
- Today
- Total
Learn & Run
[Programmers] 직업군 추천하기 (Java, Kotlin) 본문
https://programmers.co.kr/learn/courses/30/lessons/84325?language=kotlin
문제
직업군 언어 점수를 정리한 문자열 배열 table, 개발자가 사용하는 언어를 담은 문자열 배열 languages, 언어 선호도를 담은 정수 배열 preference가 매개변수로 주어집니다. 개발자가 사용하는 언어의 언어 선호도 X 직업군 언어 점수의 총합이 가장 높은 직업군을 return 하도록 solution 함수를 완성하면 됩니다.
접근 아이디어
1. 각 직업군에 대한 언어별 점수를 map을 이용하여 key, value로 저장합니다.
2. languages와 preference를 이용하여 직업군 별 언어점수 합계를 구합니다.
3. 언어점수에 대해서 최댓값을 가지는 직업군을 결과값으로 반환합니다.
조심해야할 점
1. 점수가 가장 높은 직업군을 반환할 때, 같은 점수를 가진 직업에 대해서도 고려를 해야합니다.
2. 이 경우에 사전순으로 정렬후에 첫 번째 값을 반환해야 합니다.
- Java
import java.util.*;
class Solution {
public String solution(String[] table, String[] languages, int[] preference) {
int max = Integer.MIN_VALUE; //점수의 최댓값
List<String> list = new ArrayList<>(); //점수가 같을 때, 사전 순으로 직업을 찾아야 하기 때문에 사용
for (int i = 0; i < table.length; i++) {
String[] info = table[i].split(" ");
String job = info[0]; //직업군
Map<String, Integer> map = new HashMap<>();
for (int score = 5; score >= 1; score--) {
map.put(info[5 - score + 1], score); //info[1] ~ info[5]는 언어별 점수
}
int sum = 0;
for (int idx = 0; idx<languages.length; idx++) {
if(map.containsKey(languages[idx])) {
sum += map.get(languages[idx]) * preference[idx];
}
}
if(max < sum) {
list.clear();
list.add(job);
max = sum;
} else if(max == sum) {
list.add(job);
}
}
Collections.sort(list);
return list.get(0);
}
}
- Kotlin
import java.util.*;
class Solution {
fun solution(table: Array<String>, languages: Array<String>, preference: IntArray): String {
var max = Int.MIN_VALUE //점수의 최댓값
val list: MutableList<String> = ArrayList() //점수가 같을 때, 사전 순으로 직업을 찾아야 하기 때문에 사용
for (i in table.indices) {
val info: Array<String> = table[i].split(" ".toRegex()).toTypedArray()
val job = info[0] //직업군
val map: MutableMap<String, Int> = HashMap()
for (score in 5 downTo 1) {
map[info[5 - score + 1]] = score //info[1] ~ info[5]는 언어별 점수
}
var sum = 0
for (idx in languages.indices) {
if (map.containsKey(languages.get(idx))) {
sum += map[languages[idx]]!!.times(preference[idx])
}
}
if (max < sum) {
list.clear()
list.add(job)
max = sum
} else if (max == sum) {
list.add(job)
}
}
list.sort()
return list[0]
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 실패율 (Java, Kotlin) (0) | 2021.08.30 |
---|---|
[Programmers] 신규 아이디 추천 (Java, Kotlin) (0) | 2021.08.29 |
[Programmers] 전화번호 목록 (Java) (0) | 2021.08.25 |
[Programmers] 문자열 압축 (Java, Kotlin) (0) | 2021.08.24 |
[Programmers] 짝지어 제거하기 (Java) (0) | 2021.08.23 |