programmers_순위 검색_java
2023. 5. 25. 12:16ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/72412
import java.util.*;
class Solution {
public int[] solution(String[] info, String[] query) {
int[] answer = new int[query.length];
// [언어, 직군, 경력, 소울푸드, 점수]
String[][] infos = new String[info.length][5];
String[][] querys = new String[query.length][5];
Map<String, ArrayList<Integer>> map = new HashMap<>();
// info 정보
int idx = 0;
for (String s : info){
infos[idx] = s.split(" ");
infoInput(infos[idx++], "", 0, map);
}
// map의 score 정보 정렬
for (Map.Entry<String, ArrayList<Integer>> m : map.entrySet()){
Collections.sort(m.getValue());
// System.out.println(m.getValue());
}
// query 정보
idx = 0;
for (String s : query){
s = s.replaceAll(" and ", "");
querys[idx] = s.split(" ");
answer[idx] = countApplicant(querys[idx][0], Integer.parseInt(querys[idx][1]), map);
idx++;
}
return answer;
}
// map에 경우의 수 추가
public void infoInput(String info[], String s, int cnt, Map<String, ArrayList<Integer>> map){
if (cnt == 4){
if (map.containsKey(s)){
map.get(s).add(Integer.parseInt(info[cnt]));
}else {
ArrayList<Integer> l = new ArrayList<>();
l.add(Integer.parseInt(info[cnt]));
map.put(s, l);
}
return;
}
infoInput(info, s+"-", cnt+1, map); // 조건 포함 X
infoInput(info, s+info[cnt], cnt+1, map); // 조건 포함
}
// 쿼리 조건에 맞는 지원자 수 검색
public int countApplicant(String query, int score,Map<String, ArrayList<Integer>> map){
int cnt = 0;
if (map.containsKey(query)){
cnt = findFitScore(score, map.get(query));
}else {
cnt = 0;
}
return cnt;
}
// 해당 점수 찾기
public int findFitScore(int score, List<Integer> list){
int left = 0;
int right = list.size();
int mid = 0;
//(lowerBound)
while (left < right){
mid = (left+right)/2;
if (score > list.get(mid)){
left = mid + 1;
} else{
right = mid;
}
}
// 전체 - 해당 점수 보다 작은 것의 갯수
return list.size() - right;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_요격 시스템_java (0) | 2023.05.25 |
---|---|
programmers_이모티콘 할인행사_java (0) | 2023.05.25 |
programmers_혼자서 하는 틱택토_java (0) | 2023.05.24 |
programmers_숫자 블록_java (0) | 2023.05.22 |
programmers_두 원 사이의 정수 쌍_java (0) | 2023.05.21 |