https://school.programmers.co.kr/learn/courses/30/lessons/72412
https://coding-grandpa.tistory.com/104
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
class Solution {
public int[] solution(String[] info, String[] query){
// 1. info를 기반으로 hashMap 만들기
HashMap<String, ArrayList<Integer>> hashMap = new HashMap<>();
for(String i : info){
String[] data = i.split(" "); //"java backend junior pizza 150" 하나씩 쪼갬
String[] languages = {data[0] , "-"}; //{java,"-"}
String[] jobs = {data[1],"-"};//{backend,"-"}
String[] exps = {data[2],"-"};
String[] foods = {data[3],"-"};
Integer value = Integer.parseInt(data[4]);
for(String lang : languages){
for(String job :jobs){
for(String exp : exps){
for(String food: foods){
String[] keyData ={lang,job,exp,food};
String key = String.join(" ",keyData); //for문을 통해 두 개중 들어온 하나로 이어붙힘
ArrayList<Integer> arr = hashMap.getOrDefault(key,new ArrayList<>()); //Key에 맞는 value를 주던가 없으면 새로운 리스트
arr.add(value);
hashMap.put(key,arr);
}
}
}
}
}
for(ArrayList<Integer> list : hashMap.values()){
Collections.sort(list);
}
// query 조건에 맞는 지원자 찾기
int[] answer = new int[query.length];
int i =0;
for(String q : query){
String[] data = q.split(" and "); //"java and backend and junior and pizza 100" and로 쪼개면 3번 pizza 100으로 들어옴
int target = Integer.parseInt(data[3].split(" ")[1]);
data[3] = data[3].split(" ")[0];
String key = String.join(" ",data);
if(hashMap.containsKey(key)){
ArrayList<Integer> list = hashMap.get(key);
int left = 0;
int right = list.size();
while(left < right){
int mid = (left+right)/2;
if(list.get(mid) >= target){
right = mid;
}else{
left = mid+1;
}
}
answer[i] = list.size() - left; //left는 해당 범위까지 증가한다.
}
i++;
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
백준 No.1654 랜선 자르기- JAVA (0) | 2023.03.31 |
---|---|
백준 No.2805 나무자르기 - JAVA (0) | 2023.03.29 |
프로그래머스 Lv.2 뒤에 있는 큰 수 찾기-JAVA (0) | 2023.03.26 |
프로그래머스 Lv.1 모의고사 - JAVA (0) | 2023.03.24 |
프로그래머스 Lv.2 문자열 압축 - JAVA (0) | 2023.03.22 |