저번주와 비교도 안되게 쉬운 문제가 나왔다...뭐지.....
문제 설명
1. table로 맨 처음 노드에는 직무가, 이후 노드부터는 그 직무가 선호하는 언어가 주어진다.
2. table의 선호하는 언어의 점수는 table전체 언어의 개수만큼 시작해서 내려갈수록 하나씩 뺸다 ( 예를 들어, 선호언어 6개 중 2번째로 선호하는 언어의 경우 (6-2=4점)
3. languages와 preference의 길이는 같고 해당 languages 점수는 동일 위치 preference가 된다.
4. table언어 선호도 x preference를 구하고, 그 언어 선호도의 총합이 가장 높은 직무를 return한다.
5 동일한 점수의 직무가 있으면 사전순으로 빠른 직업군을 return한다.
풀이 과정
1. 언어들을 짤라서 2차원 배열로 만들고 table의 0번 노드 기준으로 사전순으로 내림차순 정렬한다.
2. 2차원 배열들은 직업군 이름을 사전순으로 [[직업군][언어][언어][언어]], [[직업군][언어][언어][언어]]..... 요렇게 있을 것이다.
3. 여기 테이블의 언어의 최고 점수는 안의 배열의 크기가 6이면 5점이 될거다. 왜냐면 직업군을 뺀 나머지 언어들 중에 처음이니까. 4. for문을 돌리면서 languages에 해당하는 datas가 있으면 그걸 곱해주고 더해서 각각의 point를 구해준다.
4. 0번 point부터 확인해서 뒤의 크기가 더 크면 그걸 가지면 된다.
-> 여기서 굳이 막 찾아서 할 필요 없는 미세팁이 두개 있는데
첫번째로 (3)번 과정에서 보면
2번 row에서 '0'노드는 직무이다. 그러니까 언어는 '1'번노드부터 시작한다.
그럼 그냥 for문을 1부터 돌리고 이걸 빼주면 바로 구해진다.
두번째로 (4)번 과정에서 보면
동일한 점수의 직무가 있으면 사전순으로 빠른 직업군을 return하는데, 미리 사전순으로 정렬해주고 뒤의 직무 점수가 클 때만 바꿔주면 알아서 사전순으로 빠른 답이 출력된다.
근데 솔직히 이거 너무 쉬워서 뭐 설명할게 없다...물론 for문을 세번이나 돌렸기 때문에 효율성 점수가 낮을 것 같은데 효율체크를 안하니 원...아마 hashmap을 쓰면 더 효율적으로 구할 수 있을 것 같은데 다음에 바꾸어 봐야겠다..
코드
import java.util.*;
class Solution {
public String solution(String[] table, String[] languages, int[] preference) {
String answer = "";
int ans; // 가장 높은 점수를 받을 ans
String[][] datas = new String[table.length][]; // table을 나누어 저장할 datas
int cnt = 0;
for (String row : table) {
datas[cnt++] = row.split(" "); // 띄어쓰기 기준으로 나눠서 저장
}
Arrays.sort(datas, Comparator.comparing(o1 -> o1[0])); // 사전순으로 빠른 순서로 정렬
int point[] = new int[datas.length]; // 각 직무의 합계 점수 저장용
for(int i=0; i<datas.length; i++){
for(int j=1; j<datas[0].length; j++){ // 언어를 비교할거니까 1부터
for(int k=0; k<preference.length; k++){ // 선호언어
if(datas[i][j].equals(languages[k])){ // 같은언어면
point[i] += ((datas[0].length-j)*preference[k]); // 전체길이-(1+순위)인데 어차피 언어는 1부터 시작하니까 미리 -1되어 있어서 j만 뺌
}
}
}
}
ans = point[0]; // 처음 점수
answer = datas[0][0]; // 처음 직무
for(int i=0; i<point.length; i++){ // 그 뒤에가 점수가 크면 변경
if(ans < point[i] ){ // 왜 클때만이냐면 이렇게 하면 같은 점수이면 사전순으로 빠른것이 남으니까
ans = point[i];
answer = datas[i][0];
}
}
return answer;
}
}
'알고리즘 공부 > 위클리 챌린지' 카테고리의 다른 글
프로그래머스 위클리 챌린지 6주차 - java (2) | 2021.09.06 |
---|---|
프로그래머스 위클리 챌린지 5주차 - java (4) | 2021.08.30 |
프로그래머스 위클리 챌린지 3주차 - java (0) | 2021.08.22 |
프로그래머스 위클리 챌린지 2주차 - java (0) | 2021.08.10 |
프로그래머스 위클리 챌린지 1주차 - java (0) | 2021.08.10 |