일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- context
- Programmers
- hook
- codingtest
- Babel
- next13 head
- react-helmet
- Javascript
- Nextjs React 18
- Render Props
- React 공식문서
- React API 참고서
- React 18 Nextjs
- react hook
- React18
- getUTCDate
- background setInterval
- Next13
- background tab
- notFound()
- React 고급안내서
- React 고급 안내서
- RTK Query
- 고급안내서
- Nextjs
- React 18
- CSS
- background setttimeout
- react
- background: url
Archives
- Today
- Total
akjfal
[Programmers] [1차] 뉴스 클러스터링 본문
// 1.a,b를 2단어 씩으로 쪼개며 저장 - "[a-z][a-z]"에 일치하지 않는 것을 제외
// 2. union에 b를 통째로 옮김
// 3. b와 a를 비교해 key값이 일치하는 경우
// 3.1 intersection에 작은 값을 저장
// 3.2 union에 큰 값을 저장
// 4. 일치하지 않을 경우 union에만 저장
// 5. iterator를 통해 intersection과 union의 value 합 구하기
import java.util.HashMap;
import java.util.Iterator;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
HashMap<String, Integer> a = new HashMap<>();
HashMap<String, Integer> b = new HashMap<>();
for(int i = 0; i < str1.length()-1; i++){
String str1Ele = str1.substring(i, i+2);
if(str1Ele.matches("[a-z][a-z]")){
if(a.containsKey(str1Ele)){
a.put(str1Ele, a.get(str1Ele)+1);
}else{
a.put(str1Ele, 1);
}
}
}
for(int i = 0; i < str2.length()-1; i++){
String str2Ele = str2.substring(i, i+2);
if(str2Ele.matches("[a-z][a-z]")){
if(b.containsKey(str2Ele)){
b.put(str2Ele, b.get(str2Ele)+1);
}else{
b.put(str2Ele, 1);
}
}
}
HashMap<String, Integer> intersection = new HashMap<>();
HashMap<String, Integer> union = new HashMap<String, Integer>(b);
Iterator<String> itr1 = a.keySet().iterator();
while(itr1.hasNext()){
String s1 = itr1.next();
if(b.containsKey(s1)){
intersection.put(s1, Math.min(a.get(s1), b.get(s1)));
union.put(s1, Math.max(a.get(s1), b.get(s1)));
}else{
union.put(s1, a.get(s1));
}
}
int I = 0;
int U = 0;
Iterator<String> itrI = intersection.keySet().iterator();
while(itrI.hasNext()){
I += intersection.get(itrI.next());
}
Iterator<String> itrU = union.keySet().iterator();
while(itrU.hasNext()){
U += union.get(itrU.next());
}
if(U == 0){
answer = 65536;
}else{
answer = I*65536/U;
}
return answer;
}
}
어렵지 않았다. 카카오 1번정도 되는 것 같다.
'알고리즘 > programmers' 카테고리의 다른 글
[Programmers] 순위 검색 (0) | 2021.06.17 |
---|---|
[Programmers] 행렬 테두리 회전하기 (0) | 2021.06.17 |
[Programmers] 튜플 (0) | 2021.06.17 |
[Programmers] 수식 최대화 (0) | 2021.06.17 |
[Programmers] 괄호 회전하기 (0) | 2021.06.17 |
Comments