🖇️ 문제 링크
⌨️ 코드
import java.util.*;
class Solution {
public int[] solution(String[] info, String[] query) {
// <key, 점수 리스트>
Map<String, List<Integer>> map = new HashMap<>();
// map input
for(String str : info) {
String[] split = str.split(" ");
int score = Integer.parseInt(split[4]);
//key 생성
for(int i = 0; i < (1 << 4); i++) {
String key = "";
for(int j = 0; j < 4; j++) {
if((i & (1 << j)) != 0)
key += split[j];
}
if(!map.containsKey(key))
map.put(key, new ArrayList<Integer>());
map.get(key).add(score);
}
}
for(Map.Entry<String, List<Integer>> e : map.entrySet())
e.getValue().sort(null);
int idx = 0;
int[] ans = new int[query.length];
// query 처리
for(String q : query) {
String[] split = q.split(" ");
int score = Integer.parseInt(split[split.length - 1]);
String key = q.replace("and", "").replaceAll("[^a-z]", "");
//key에 해당하는 맵 리스트 찾기
List<Integer> list = map.getOrDefault(key, new ArrayList<>());
//이분탐색, lowerBound
int lo = 0, hi = list.size();
while(lo < hi) {
int mid = (lo + hi) / 2;
if(list.get(mid) >= score)
hi = mid;
else
lo = mid + 1;
}
ans[idx++] = list.size() - hi;
}
return ans;
}
}
Uploaded by Notion2Tistory v1.1.0