🖇️ 문제 링크
📝 문제 분석
html 페이지에서 웹페이지의 URL과 외부 링크의 URL을 정규식 매칭을 이용해 찾아낸다.
외부 링크의 개수를 통해 기본 점수를 구한다.
웹페이지들을 각각 연결 상태를 파악하고, 매칭 점수를 구해서 최대 매칭 점수의 인덱스를 리턴한다.
⌨️ 코드
import java.util.*;
import java.util.regex.*;
class Solution {
public int solution(String word, String[] pages) {
int n = pages.length;
String[] urls = new String[n];
Set<String>[] outlinks = new Set[n];
for (int i = 0; i < n; ++i)
outlinks[i] = new HashSet<String>();
int[] defaultScores = new int[n];
Pattern urlPattern = Pattern.compile("<\\s*meta\\s+property=\"og:url\"\\s+content=\"([^\"]+)\"/>");
Pattern outlinkPattern = Pattern.compile("<\\s*a\\s+href=\"([^\"]+)\">");
for (int i = 0; i < n; ++i) {
String page = pages[i];
Matcher urlMatcher = urlPattern.matcher(page);
if (urlMatcher.find())
urls[i] = urlMatcher.group(1);
Matcher outlinkMatcher = outlinkPattern.matcher(page);
while (outlinkMatcher.find())
outlinks[i].add(outlinkMatcher.group(1));
String[] words = page.split("[^[a-zA-Z]]");
for (String candidate : words) {
if (candidate.equalsIgnoreCase(word))
defaultScores[i]++;
}
}
double[] scores = new double[n];
for (int i = 0; i < n; ++i) {
scores[i] += defaultScores[i];
for (int j = 0; j < n; ++j) {
if (i != j && outlinks[j].contains(urls[i]))
scores[i] += (double) defaultScores[j] / outlinks[j].size();
}
}
int answer = 0;
double maxScore = 0.0;
for (int i = 0; i < n; ++i) {
if (Double.compare(scores[i], maxScore) > 0) {
maxScore = scores[i];
answer = i;
}
}
return answer;
}
}
Uploaded by Notion2Tistory v1.1.0