[プログラマー]マッチングスコア(JAVA)
3157 ワード
問題の説明
フレンズ大学の助教だったジェギーは、雑用だけをさせたニオ学部主任の魔の手から抜け出し、ココア社に入った.
普段から興味のある検索にはちょうど空きがあり、検索開発チームに組み込まれ、期待される最初のプロジェクトを担当することができます.
このアイテムは、次のルールによって、検索語に対するWebページのマッチングスコアを計算し、検索語に最適なWebページを表示します.
Code
自分のurlを取得する部分では、httpsで始まる部分が取得され、httpsもurlの前に現れる可能性があります.
urlPattern全体で見つけました.
フレンズ大学の助教だったジェギーは、雑用だけをさせたニオ学部主任の魔の手から抜け出し、ココア社に入った.
普段から興味のある検索にはちょうど空きがあり、検索開発チームに組み込まれ、期待される最初のプロジェクトを担当することができます.
このアイテムは、次のルールによって、検索語に対するWebページのマッチングスコアを計算し、検索語に最適なWebページを表示します.
Code
import java.util.*;
class Solution {
private int[] scores;
private int[] extCnt;
private Map<String, List<Integer>> extUrl;
private Map<Integer, String> url;
public int solution(String word, String[] pages) {
scores = new int[pages.length];
extCnt = new int[pages.length];
extUrl = new HashMap<>();
url = new HashMap<>();
int ret = 0;
double retScore = Long.MIN_VALUE;
word = word.toLowerCase();
for(int i=0 ; i<pages.length ; i++) {
// lowercase
String page = pages[i].toLowerCase();
init(page, word, i);
}
for(int i=0 ; i<pages.length ; i++) {
double score = scores[i];
if(extUrl.containsKey(url.get(i))) {
for(int extIdx : extUrl.get(url.get(i))) {
// 외부 url이 없는 경우는 0나누기 에러날텐데?
score += (double)scores[extIdx]/(double)extCnt[extIdx];
}
}
if(retScore<score) {
retScore = score;
ret = i;
}
}
return ret;
}
public void init(String page, String word, int idx) {
// Get url(실패)
//int urlStart=page.indexOf("https"); // https가 url 앞에 있을 수도 있나보다.
//int urlEnd=page.indexOf("\"",urlStart);
//String curUrl = page.substring(urlStart, urlEnd);
// Get url
String urlPattern = "<meta property=\"og:url\" content=\"";
int urlStart = page.indexOf(urlPattern) + urlPattern.length();
int urlEnd = page.indexOf("\"/>", urlStart);
String curUrl = page.substring(urlStart, urlEnd);
url.put(idx, curUrl);
// Set External url
String[] aHerf = page.split("<a href=\"");
for(int a=1 ; a<aHerf.length ; a++) {
// 연결된 url
String linkedUrl = aHerf[a].substring(0, aHerf[a].indexOf("\""));
// 연결 url에 현재 url 추가
if(!extUrl.containsKey(linkedUrl)) extUrl.put(linkedUrl, new ArrayList<>());
extUrl.get(linkedUrl).add(idx);
}
// Set Extrenal url Count
extCnt[idx] = aHerf.length-1;
// Set score
page = page.replaceAll("[^a-zA-Z]", " ");
scores[idx] = countWord(page.split(" "), word);
return;
}
public int countWord(String[] words, String word) {
int cnt=0;
for(String w : words) {
if(w.equals(word)) cnt++;
}
return cnt;
}
}
Comment自分のurlを取得する部分では、httpsで始まる部分が取得され、httpsもurlの前に現れる可能性があります.
urlPattern全体で見つけました.
Reference
この問題について([プログラマー]マッチングスコア(JAVA)), 我々は、より多くの情報をここで見つけました https://velog.io/@ujone/프로그래머스-매칭-점수-JAVAテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol