티스토리 뷰
1. 문제
https://programmers.co.kr/learn/courses/30/lessons/17677
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브��
programmers.co.kr
2. 설명
먼저 받은 문자열에서 알파벳외의 문자를 제거하고(0으로 대체), 소문자로 변환시켜줬다.
그리고 두 글자씩 끊어서 list에 저장하고, 교집합과 합집합을 구했다.
중복이 허용되기 때문에 합집합구할 때 set 사용 못했다.
그냥 자체 함수 구현해서 코딩했다.
3. 코드
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
str1 = str1.replaceAll("[^a-zA-Z]","0").toLowerCase();
str2 = str2.replaceAll("[^a-zA-Z]","0").toLowerCase();
ArrayList<String> aList = new ArrayList<>();
ArrayList<String> bList = new ArrayList<>();
// 두 글자씩 끊기
for(int i=0; i<str1.length()-1; i++) {
if(!str1.substring(i,i+2).contains("0"))
aList.add(str1.substring(i,i+2));
}
for(int i=0; i<str2.length()-1; i++) {
if(!str2.substring(i,i+2).contains("0"))
bList.add(str2.substring(i,i+2));
}
double inter = intersection(aList,bList).size();
double union = aList.size() + bList.size() - inter;
if(inter == 0 && union == 0)
return 65536;
else
answer = (int)(inter/union * 65536);
return answer;
}
// 교집합
ArrayList<String> intersection(ArrayList<String> A, ArrayList<String> B) {
A = (ArrayList<String>) A.clone();
B = (ArrayList<String>) B.clone();
ArrayList<String> list = new ArrayList<>();
for(String s : A) {
if(B.contains(s)) {
list.add(s);
B.remove(s);
}
}
return list;
}
}
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 [3차] n진수 게임 JAVA (0) | 2020.06.05 |
---|---|
프로그래머스 [1차] 캐시 JAVA (0) | 2020.06.03 |
프로그래머스 전화번호 목록 JAVA (0) | 2020.05.22 |
프로그래머스 오픈채팅방 JAVA (0) | 2020.05.21 |
프로그래머스 124 나라의 숫자 JAVA (0) | 2020.05.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday