Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Java heap
- 프렌즈4블록java
- 자료구조힙
- 카카오코딩테스트
- java method
- heap정렬
- 힙정렬자바
- 백준 1000번
- 객체프로그래밍이란
- 코딩테스트기출
- 프로그래머스
- 프렌즈4블록
- 백준
- 객체프로그래밍
- 자료구조 트리
- 자바문자열
- heap
- 알고리즘
- 코테준비
- 문자열포맷
- 카카오1차
- java
- 백준 1924번
- 카카오코테
- 개발상식
- 카카오기출
- 공부정리
- 자바
- 백준 1000번 java
- 백준 1924번 java
Archives
- Today
- Total
일단 시작해보는 블로그
[알고리즘] 카카오_뉴스 클러스터링 본문
https://programmers.co.kr/learn/courses/30/lessons/17677
처음엔 왜 Queue를 가지고 풀려고 했었는지 모르겠다ㅠㅠ 큐 문제였을까 아니면 정규식을 이용해서 String클래스에 있는 matches메서드를 사용해서 영문자로만 되어있는걸 걸러내지 못했던 탓일까 처음에 많이 헷깔렸던 문제..!
덕분에 Queue, ArrayList, String클래스의 메서드 등에 대하여 정리하게 되었다.
처음 작성한 코드..
합계: 30.8 / 100.0
ㅠㅠ
import java.util.*;
class Solution {
static List<String> arr_1 = new ArrayList<>();
static List<String> arr_2 = new ArrayList<>();
static void getArray(String str, int n){
str = str.toLowerCase();
char[] result = str.toCharArray();
String tmp = "";
int i=0;
while(i<result.length){
int c = (int)result[i];
if(c >= 97 && c <= 122){
if(tmp.length() == 0){
tmp += result[i++];
}else if(tmp.length() == 2){
if(n == 1){
arr_1.add(tmp);
}
if(n == 2){
arr_2.add(tmp);
}
tmp = "";
continue;
}else{
tmp += result[i];
}
}else {
if(tmp.length() == 1){
tmp = "";
i++;
}
}
}
}
//자카드 유사도
static int news_answer(){
int arbi = 0;
int sum = 0;
while(arr_1.size() > 0){
if(arr_2.contains(arr_1.get(0))){
arr_2.remove(arr_1.get(0));
arr_1.remove(0);
arbi += 1;
sum += 1;
}else {
arr_1.remove(0);
sum += 1;
}
}
if(arr_2.size() > 0){
sum += arr_2.size();
}
int an = (int)Math.floor((double)arbi/sum * 65536);
return an;
}
public int solution(String str1, String str2) {
//영문자 필터 후 넣기
getArray(str1, 1);
getArray(str2, 2);
//자카드 유사도
return news_answer();
}
}
두번째 로직을 바꿨다.
합계: 100.0 / 100.0
import java.util.*;
class Solution {
public static int getJarkad(String str1, String str2){
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
//str1 영문자만 두글자 있으면 자르기
String tmpStr = "";
//set list1
for(int i=0; i<str1.length()-1; i++){
tmpStr = str1.substring(i, i+2).toUpperCase();
if(tmpStr.matches("^[A-Z]+$")){
list1.add(tmpStr);
}
}
//set list2
for(int i=0; i<str2.length()-1; i++){
tmpStr = str2.substring(i, i+2).toUpperCase();
if(tmpStr.matches("^[A-Z]+$")){
list2.add(tmpStr);
}
}
//set union list
ArrayList<String> unionList = getUnionList(list1, list2);
//set intersection list
ArrayList<String> intersectionList = getIntersectionList(list1, list2);
if(intersectionList.size() == unionList.size()) {
return 65536;
}
else {
return (int) ((double) intersectionList.size() / (double) unionList.size() * (double) 65536);
}
}
private static ArrayList<String> getUnionList(ArrayList<String> list1, ArrayList<String> list2){
list1 = (ArrayList<String>) list1.clone();
list2 = (ArrayList<String>) list2.clone();
ArrayList<String> unionList = new ArrayList<>();
for(String str : list1){
if(list2.contains(str)){
list2.remove(str);
}
unionList.add(str);
}
unionList.addAll(list2);
return unionList;
}
private static ArrayList<String> getIntersectionList(ArrayList<String> list1, ArrayList<String> list2){
list1 = (ArrayList<String>) list1.clone();
list2 = (ArrayList<String>) list2.clone();
ArrayList<String> intersectionList = new ArrayList<>();
for(String str : list1){
if(list2.contains(str)){
intersectionList.add(str);
list2.remove(str);
}
}
return intersectionList;
}
public int solution(String str1, String str2) {
int answer = getJarkad(str1, str2);
return answer;
}
}
'CS > 알고리즘 풀이' 카테고리의 다른 글
[알고리즘_문자열] 문자열 뒤집기 (0) | 2019.08.24 |
---|---|
[알고리즘] 이친수, 백준 2193 (0) | 2019.08.23 |
[알고리즘_dp] 백준 11057, 오르막 수 (0) | 2019.08.20 |
[알고리즘_dp] 1,2,3 더하기 (0) | 2019.08.20 |
[카카오코테문제] 비밀지도 (0) | 2019.08.14 |
Comments