728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42893
1.Pattern 클래스
- 정규 표현식이 컴파일 된 클래스
- 정규 표현식에 대상 문자열을 검증하거나 활용하기 위해 사용되는 클래스
주요 메소드
2. Matcher 클래스
- Pattern 클래스를 받아 대상 문자열과 패턴이 일치하는 부분을 찾거나, 전체 일치 여부 등을 판별하기 위해 사용된다
주요 메소드
Link 클래스
class Link {
String url; //자기 자신 링크
String[] extUrls; //외부 링크들
double point, linkPoint; //기본 점수, 링크 점수
int index; //인덱스
public Link(int index, String url) {
this.index = index;
this.url = url;
}
public void setExtUrls(ArrayList<String> urls) {
this.extUrls = new String[urls.size()];
for(int i=0; i<urls.size();i++) {
extUrls[i] = urls.get(i);
}
}
public void setLinkPoint() {
this.linkPoint = this.point / extUrls.length;
}
}
- 링크들에 대한 정보를 저장하는 클래스
- url : 자기 자신의 링크 이름을 저장한다
- extUrls : 해당 링크에 걸린 외부 링크들의 리스트를 저장한다
- point : 해당 링크의 기본 점수
- linkPoint : 해당 링크의 링크 점수
전체 코드)
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Solution {
HashMap<String, Link> Links;
public int solution(String word, String[] pages) {
int answer = 0;
Links = new HashMap<>();
Pattern homeUrlPattern = Pattern.compile("<meta property=\"og:url\" content=\"(\\S*)\""); //자기 자신의 url 링크 추출
Pattern urlPattern = Pattern.compile("<a href=\"https://(\\S*)\""); //외부 링크 추출
Pattern wordPattern = Pattern.compile("\\b(?i)"+word+"\\b"); //단어 언급 수 (기본점수)
Matcher urlMatcher, wordMatcher, homeUrlMatcher;
ArrayList<String> extUrls;
Link newLink;
String body;
String homeUrl = "";
for(int i=0;i<pages.length;i++) {
urlMatcher = urlPattern.matcher(pages[i]);
homeUrlMatcher = homeUrlPattern.matcher(pages[i]);
if(homeUrlMatcher.find()) {
System.out.println(homeUrl);
homeUrl = homeUrlMatcher.group().split("=")[2].replaceAll("\"", "");
System.out.println(homeUrl);
}
newLink = new Link(i, homeUrl);
extUrls = new ArrayList<>();
// 외부 링크 저장
while(urlMatcher.find()) {
extUrls.add(urlMatcher.group().split("\"")[1]);
}
newLink.setExtUrls(extUrls);
// 기본 점수 계산
body = pages[i].split("<body>")[1].split("</body>")[0].replaceAll("[0-9]", " ");
wordMatcher = wordPattern.matcher(body);
int wordCnt = 0;
while(wordMatcher.find()) {
wordCnt++;
}
newLink.point = wordCnt;
newLink.setLinkPoint();
Links.put(newLink.url, newLink);
}
// 외부 링크 점수 계산
for(Link link: Links.values()){
for(String extUrl : link.extUrls){
if(Links.containsKey(extUrl)){
Links.get(extUrl).point += link.linkPoint;
}
}
}
// 가장 큰 값을 갖는 링크 계산
double max_point = 0;
for(Link link: Links.values()){
if(link.point == max_point){
if(link.index < answer)
answer = link.index;
}
else if(link.point > max_point) {
answer = link.index;
max_point = link.point;
}
}
return answer;
}
class Link {
String url; //자기 자신 링크
String[] extUrls; //외부 링크들
double point, linkPoint; //기본 점수, 링크 점수
int index; //인덱스
public Link(int index, String url) {
this.index = index;
this.url = url;
}
public void setExtUrls(ArrayList<String> urls) {
this.extUrls = new String[urls.size()];
for(int i=0; i<urls.size();i++) {
extUrls[i] = urls.get(i);
}
}
public void setLinkPoint() {
this.linkPoint = this.point / extUrls.length;
}
}
}
솔직히,, 이런 문제 나오면,,,
안 풀고 다른 문제 풀 것 같아요😥😥
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[그리디] 섬 연결하기 - JAVA (0) | 2022.10.20 |
---|---|
[완전 탐색] 전력망을 둘로 나누기 - JAVA (1) | 2022.10.19 |
[2021 KAKAO BLIND RECRUITMENT] 순위 검색 - JAVA (0) | 2022.10.11 |
[2020 KAKAO BLIND RECRUITMENT] 괄호 변환 - JAVA (0) | 2022.10.11 |
[월간 코드 챌린지 시즌1] 3진법 뒤집기 (0) | 2022.09.21 |
댓글