#include <string> #include <vector> #include <iostream> using namespace std; void lower(string &a) { for(int i = 0; i < a.size(); i++) { if('A' <= a[i] && a[i] <= 'Z') { a[i] = a[i]-'A'+'a'; } } } int solution(string word, vector<string> pages) { int stdScore[25] = {0}; double result[25] = {0}; vector<string> my_page[25]; vector<string> out_page[25]; for(int i = 0; i < pages.size(); i++) { // 페이지, 찾는 단어 소문자 변환 int idx = 0; lower(pages[i]); lower(word); // my_page idx = pages[i].find("<meta property=\"og:url\"", idx); idx = pages[i].find("https://", idx); string my_url = ""; for(int j = idx; pages[i][j] != '"'; j++) { my_url += pages[i][j]; } my_page[i].push_back(my_url); // out_page while(pages[i].find("<a href=", idx) != string::npos) { idx = pages[i].find("<a href=", idx); idx = pages[i].find("https://", idx); string link_url = ""; for(int j = idx; pages[i][j] != '"'; j++) { link_url += pages[i][j]; } out_page[i].push_back(link_url); } // 기본점수 idx = 0; int wordCnt = 0; while(pages[i].find(word, idx) != string::npos) { bool notWord = false; idx = pages[i].find(word, idx); // 찾은 단어 바로 앞 확인 if(0 <= idx-1 && idx-1 < pages[i].size() && 'a' <= pages[i][idx-1] && pages[i][idx-1] <= 'z') { notWord = true; } idx += word.size(); // 찾은 단어 뒤 확인 while(0 <= idx && idx < pages[i].size() && 'a' <= pages[i][idx] && pages[i][idx] <= 'z') { notWord = true; idx++; } if(notWord == false) { wordCnt++; } } stdScore[i] = wordCnt; } // 링크점수 + 매칭점수 for(int i = 0; i < pages.size(); i++) { int linkCnt = 0; vector<int> link; for(int j = 0; j < pages.size(); j++) { if(i == j) { continue; } for(int k = 0; k < out_page[j].size(); k++) { if(my_page[i][0] == out_page[j][k]) { link.push_back(j); } } } result[i] = stdScore[i]; for(int j = 0; j < link.size(); j++) { if(stdScore[link[j]] == 0 || out_page[link[j]].size() == 0) { continue; } double linkScore = (double)stdScore[link[j]] / out_page[link[j]].size(); result[i] += linkScore; } } double Max = -1; int MaxIdx = -1; for(int i = 0; i < pages.size(); i++) { if(Max < result[i]) { Max = result[i]; MaxIdx = i; } } return MaxIdx; } | cs |
'Programmers > Level 3' 카테고리의 다른 글
[프로그래머스 3] 2xN 타일링 (C/C++) (0) | 2020.03.06 |
---|---|
[프로그래머스 3] 길찾기 게임 (C/C++) (★★) (0) | 2020.03.05 |
[프로그래머스 3] 순위 (C/C++) (★★) (0) | 2020.02.05 |
[프로그래머스 3] 가장 먼 노드 (C/C++) (0) | 2020.02.05 |
[프로그래머스 3] 입국 심사 (C/C++) (0) | 2020.01.27 |