728x90
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
import java.util.*;
class Solution {
Map<String, Integer> Wordmap = new HashMap<>();
List<List<Integer>> ScoreList = new ArrayList<>();
public int[] solution(String[] info, String[] query) {
Wordmap.put("-", 0);
Wordmap.put("cpp", 1);
Wordmap.put("java", 2);
Wordmap.put("python", 3);
Wordmap.put("backend", 1);
Wordmap.put("frontend", 2);
Wordmap.put("junior", 1);
Wordmap.put("senior", 2);
Wordmap.put("chicken", 1);
Wordmap.put("pizza", 2);
for(int i=0; i<4*3*3*3; i++) {
ScoreList.add(new ArrayList<>());
}
for(String str : info) {
String[] word = str.split(" ");
int[] arr = {
Wordmap.get(word[0])*3*3*3,
Wordmap.get(word[1])*3*3,
Wordmap.get(word[2])*3,
Wordmap.get(word[3])};
int score = Integer.parseInt(word[4]);
for(int i=0; i<(1<<4); i++) {
int idx = 0;
for(int j=0; j<4; j++) {
if((i & (1<<j)) != 0 ) {
idx+= arr[j];
}
}
ScoreList.get(idx).add(score);
}
}
for(int i=0; i<4*3*3*3; i++)
Collections.sort(ScoreList.get(i));
int[] answer = new int[query.length];
for(int i=0; i<query.length; i++) {
String[] word = query[i].split(" ");
int idx =
Wordmap.get(word[0])*3*3*3+
Wordmap.get(word[2])*3*3+
Wordmap.get(word[4])*3+
Wordmap.get(word[6]);
int score = Integer.parseInt(word[7]);
int ret = Collections.binarySearch(ScoreList.get(idx), score);
if(ret<0) {
ret = -(ret+1);
}else {
for(int j=ret-1; j>=0; j--) {
if(ScoreList.get(idx).get(j)==score) {
ret = j;
}else {
break;
}
}
}
answer[i] = ScoreList.get(idx).size()-ret;
}
return answer;
}
}
|
cs |
효율성에서 오류가 안나려면
완전탐색이 아닌 binarySearch를 해주어야 하고
62~68 Line에서 중복된 값에서 LowerBound를 찾는 조건(score가 같은 경우)를 충족시키지 못할 때
반드시 break문을 걸어서 반복문을 탈출해줘야한다 (이것 때문에 효율성에서 걸림)
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][JAVA] 광고 삽입 (브루트 포스, 완전 탐색, 투포인터) (0) | 2021.09.08 |
---|---|
[프로그래머스][JAVA] 합승 택시 요금 (그래프, DP, 플로이드 와샬) (0) | 2021.09.08 |
[프로그래머스][JAVA] 메뉴 리뉴얼 (List<Map>, 재귀함수로 DFS) (0) | 2021.09.07 |
[프로그래머스][JAVA] 신규 아이디 추천 (String) (0) | 2021.09.06 |
프로그래머스 - 숫자 야구 (완전탐색) (0) | 2019.12.13 |