250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 2022년 6월 일상
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 플러터 flutter
- 막내의막무가내
- 막내의막무가내 안드로이드
- 막내의막무가내 일상
- 안드로이드 sunflower
- 막내의막무가내 프로그래밍
- 부스트코스
- 프래그먼트
- 주엽역 생활맥주
- 막내의 막무가내 알고리즘
- 막내의 막무가내
- 막무가내
- 막내의막무가내 알고리즘
- 막내의막무가내 안드로이드 에러 해결
- Fragment
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 목표 및 회고
- 막내의막무가내 플러터
- 막내의막무가내 rxjava
- 부스트코스에이스
- 막내의막무가내 코틀린
- 프로그래머스 알고리즘
- 안드로이드 Sunflower 스터디
- 막내의막무가내 코볼 COBOL
- flutter network call
- 주택가 잠실새내
- 막내의막무가내 SQL
- 안드로이드
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 프로그래머스 뉴스 클러스터링 - 2018 KAKAO BLIND RECRUITMENT 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/17677#
카카오 코딩테스트 중급 문제를 풀어 봤습니다. 이 문제도 이전문제처럼 지인이 추천한 문제입니다. ㅎㅎ
자카드 유사도 라는 알고리즘을 구현하는 문제라고 보면 될 것 같습니다
문제를 보자마자 HashMap의 getOrDefault() 를 사용하여 풀어야겠다고 생각이 들어 그대로 풀어버렸습니다.
예전에도 이 함수로 풀었던 문제가 기억나네요.
https://youngest-programming.tistory.com/170
해결 후 다른 사람들 풀이도 봤는데 HashMap 사용하는 사람은 저밖에 안보이고 다들 리스트나 배열로 그냥 풀더라고요..
참고하면 좋을 것 같습니다.
영문 정규식, 맵 EntrySet로 갖고오는거는 꼭 머릿속에 기억하도록 해야겠습니다. !! (군대에서 2년동안 이클립스도 모르고 자바의 정석 책만 봤어서 Map의 EntrySet 차례대로 갖고오는 거는 안까먹을 것 같습니다. ㅎㅎ TMI )
코드는 다음과 같습니다. 주석으로 설명 적어놨습니다. !
교집합 개수 , 합집합 개수 는 마지막에 계산을 위해서만 사용하기 때문에 nList , uList ArrayList 말고 그냥 int로 개수 증가시키는 걸로 해도 되는데 전 List 빠이기 때문에 허허허
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Pattern;
class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
solution.solution("handshakee", "shake hands");
}
public int solution(String str11, String str22) {
String str1 = str11.toLowerCase();
String str2 = str22.toLowerCase();
int answer = 0;
HashMap<String, Integer> map1 = new HashMap();
HashMap<String, Integer> map2 = new HashMap();
ArrayList<String> nList = new ArrayList<>(); //교집합
ArrayList<String> uList = new ArrayList<>(); //합집합
String mapKey1;
String mapKey2;
int i = 0;
//str1 초기화
while (i != str1.length() - 1) {
mapKey1 = str1.substring(i, i + 2);
if (isEng(mapKey1)) {
map1.put(mapKey1, map1.getOrDefault(mapKey1, 0) + 1);
}
i++;
}
//str2 초기화
i = 0;
while (i != str2.length() - 1) {
mapKey2 = str2.substring(i, i + 2);
if (isEng(mapKey2)) {
map2.put(mapKey2, map2.getOrDefault(mapKey2, 0) + 1);
}
i++;
}
Iterator<Map.Entry<String, Integer>> entries1 = map1.entrySet().iterator();
while (entries1.hasNext()) {
Map.Entry<String, Integer> entry = entries1.next();
// str1 만 값 갖고있거나 더 많이 혹은 똑같이 갖고 있는 경우
if (entry.getValue() >= map2.getOrDefault(entry.getKey(), 0)) {
// 합집합 처리(더많은기준으로)
for (i = 0; i < entry.getValue(); i++) {
uList.add(entry.getKey());
}
// 교집합 처리(더적은거 기준으로, 겹치는거없으면 0)
for (i = 0; i < map2.getOrDefault(entry.getKey(), 0); i++) {
nList.add(entry.getKey());
}
if (map2.getOrDefault(entry.getKey(), 0) != 0) {
map2.remove(entry.getKey());
}
} else { // str2 가 str1 보다 해당 값 더 많이 갖고 있는 경우
// 합집합 처리
for (i = 0; i < map2.get(entry.getKey()); i++) {
uList.add(entry.getKey());
}
// 교집합 처리
for (i = 0; i < entry.getValue(); i++) {
nList.add(entry.getKey());
}
if (map2.getOrDefault(entry.getKey(), 0) != 0) {
map2.remove(entry.getKey());
}
}
}
//남은 map2 꺼 합집합에 추가(str2만 갖고있는 값)
Iterator<Map.Entry<String, Integer>> entries2 = map2.entrySet().iterator();
while (entries2.hasNext()) {
Map.Entry<String, Integer> entry = entries2.next();
for(i=0; i<entry.getValue(); i++){
uList.add(entry.getKey());
}
}
//자카드 유사도
if (uList.size() == 0) {
return 65536;
} else {
answer = (int) ((double) nList.size() / uList.size()*65536);;
return answer;
}
}
private static boolean isEng(String str) {
boolean flag = Pattern.matches("^[a-zA-Z]*$", str);
return flag;
}
}
728x90
'알고리즘 > 일반(단순구현)' 카테고리의 다른 글
[알고리즘] 백준 11729 하노이 탑 이동 순서 - -재귀- (0) | 2020.04.25 |
---|---|
[알고리즘] 프로그래머스 캐시 -2018 KAKAO BLIND RECRUITMENT- (0) | 2020.03.29 |
[알고리즘] 프로그래머스 예상 대진표 -2017 팁스타운- (0) | 2020.03.27 |
[알고리즘] 프로그래머스 스킬트리 -서머코딩/윈터코딩(~2018) (0) | 2020.03.17 |
[알고리즘] 백준 2748 피보나치 수 2 (0) | 2019.09.02 |
Comments