๋งค์นญ ์ ์
๊ฑธ๋ฆฐ ์๊ฐ : 3์๊ฐ ์ด์
๋ฌธ์
๋์ด๋ โ โ โ โโ
๋ฌธ์ ์ค๋ช
ํ๋ ์ฆ ๋ํ๊ต ์กฐ๊ต์๋ ์ ์ด์ง๋ ํ๋๋ ์ผ๋ง ์ํค๋ ๋ค์ค ํ๊ณผ์ฅ๋์ ๋ง์์์ ๋ฒ์ด๋, ์นด์นด์ค์ ์
์ฌํ๊ฒ ๋์๋ค.
ํ์์ ๊ด์ฌ์์ดํ๋ ๊ฒ์์ ๋ง์นจ ๊ฒฐ์์ด ๋ฐ์ํ์ฌ, ๊ฒ์๊ฐ๋ฐํ์ ํธ์
๋ ์ ์์๊ณ , ๋๋ง์ ์ฒซ ํ๋ก์ ํธ๋ฅผ ๋งก๊ฒ ๋์๋ค.
๊ทธ ํ๋ก์ ํธ๋ ๊ฒ์์ด์ ๊ฐ์ฅ ์ ๋ง๋ ์นํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์๋์ ๊ฐ์ ๊ท์น์ผ๋ก ๊ฒ์์ด์ ๋ํ ์นํ์ด์ง์ ๋งค์นญ์ ์๋ฅผ ๊ณ์ฐ ํ๋ ๊ฒ์ด์๋ค.
- ํ ์นํ์ด์ง์ ๋ํด์ ๊ธฐ๋ณธ์ ์, ์ธ๋ถ ๋งํฌ ์, ๋งํฌ์ ์, ๊ทธ๋ฆฌ๊ณ ๋งค์นญ์ ์๋ฅผ ๊ตฌํ ์ ์๋ค.
- ํ ์นํ์ด์ง์ ๊ธฐ๋ณธ์ ์๋ ํด๋น ์นํ์ด์ง์ ํ ์คํธ ์ค, ๊ฒ์์ด๊ฐ ๋ฑ์ฅํ๋ ํ์์ด๋ค. (๋์๋ฌธ์ ๋ฌด์)
- ํ ์นํ์ด์ง์ ์ธ๋ถ ๋งํฌ ์๋ ํด๋น ์นํ์ด์ง์์ ๋ค๋ฅธ ์ธ๋ถ ํ์ด์ง๋ก ์ฐ๊ฒฐ๋ ๋งํฌ์ ๊ฐ์์ด๋ค.
- ํ ์นํ์ด์ง์ ๋งํฌ์ ์๋ ํด๋น ์นํ์ด์ง๋ก ๋งํฌ๊ฐ ๊ฑธ๋ฆฐ ๋ค๋ฅธ ์นํ์ด์ง์ ๊ธฐ๋ณธ์ ์ ÷ ์ธ๋ถ ๋งํฌ ์์ ์ดํฉ์ด๋ค.
- ํ ์นํ์ด์ง์ ๋งค์นญ์ ์๋ ๊ธฐ๋ณธ์ ์์ ๋งํฌ์ ์์ ํฉ์ผ๋ก ๊ณ์ฐํ๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด A, B, C ์ธ ๊ฐ์ ์นํ์ด์ง๊ฐ ์๊ณ , ๊ฒ์์ด๊ฐ hi๋ผ๊ณ ํ์.
์ด๋ A ์นํ์ด์ง์ ๋งค์นญ์ ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐํ ์ ์๋ค.
- ๊ธฐ๋ณธ ์ ์๋ ๊ฐ ์นํ์ด์ง์์ hi๊ฐ ๋ฑ์ฅํ ํ์์ด๋ค.
- A,B,C ์นํ์ด์ง์ ๊ธฐ๋ณธ์ ์๋ ๊ฐ๊ฐ 1์ , 4์ , 9์ ์ด๋ค.
- ์ธ๋ถ ๋งํฌ์๋ ๋ค๋ฅธ ์นํ์ด์ง๋ก ๋งํฌ๊ฐ ๊ฑธ๋ฆฐ ๊ฐ์์ด๋ค.
- A,B,C ์นํ์ด์ง์ ์ธ๋ถ ๋งํฌ ์๋ ๊ฐ๊ฐ 1์ , 2์ , 3์ ์ด๋ค.
- A ์นํ์ด์ง๋ก ๋งํฌ๊ฐ ๊ฑธ๋ฆฐ ํ์ด์ง๋ B์ C๊ฐ ์๋ค.
- A ์นํ์ด์ง์ ๋งํฌ์ ์๋ B์ ๋งํฌ์ ์ 2์ (4 ÷ 2)๊ณผ C์ ๋งํฌ์ ์ 3์ (9 ÷ 3)์ ๋ํ 5์ ์ด ๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก, A ์นํ์ด์ง์ ๋งค์นญ์ ์๋ ๊ธฐ๋ณธ์ ์ 1์ + ๋งํฌ์ ์ 5์ = 6์ ์ด ๋๋ค.
๊ฒ์์ด word์ ์นํ์ด์ง์ HTML ๋ชฉ๋ก์ธ pages๊ฐ ์ฃผ์ด์ก์ ๋, ๋งค์นญ์ ์๊ฐ ๊ฐ์ฅ ๋์ ์นํ์ด์ง์ index๋ฅผ ๊ตฌํ๋ผ. ๋ง์ฝ ๊ทธ๋ฐ ์นํ์ด์ง๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ์ค ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ๊ฒ์ ๊ตฌํ๋ผ.
์ ํ์ฌํญ
-
pages๋ HTML ํ์์ ์นํ์ด์ง๊ฐ ๋ฌธ์์ด ํํ๋ก ๋ค์ด์๋ ๋ฐฐ์ด์ด๊ณ , ๊ธธ์ด๋
1
์ด์20
์ดํ์ด๋ค. -
ํ ์นํ์ด์ง ๋ฌธ์์ด์ ๊ธธ์ด๋
1
์ด์1,500
์ดํ์ด๋ค. -
์นํ์ด์ง์ index๋ pages ๋ฐฐ์ด์ index์ ๊ฐ์ผ๋ฉฐ 0๋ถํฐ ์์ํ๋ค.
-
ํ ์นํ์ด์ง์ url์ HTML์ํ๊ทธ ๋ด์ํ๊ทธ์ ๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ค.
- ์๋ฅผ๋ค์ด, ์๋์ ๊ฐ์ meta tag๊ฐ ์์ผ๋ฉด ์ด ์นํ์ด์ง์ url์ https://careers.kakao.com/index ์ด๋ค.
-
ํ ์นํ์ด์ง์์ ๋ชจ๋ ์ธ๋ถ ๋งํฌ๋ <a href=
https://careers.kakao.com/index
>์ ํํ๋ฅผ ๊ฐ์ง๋ค.
- ๋ด์ ๋ค๋ฅธ attribute๊ฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฉฐ ํญ์ href๋ก ์ฐ๊ฒฐํ ์ฌ์ดํธ์ url๋ง ํฌํจ๋๋ค.
- ์์ ๊ฒฝ์ฐ์์ ํด๋น ์นํ์ด์ง๋ https://careers.kakao.com/index ๋ก ์ธ๋ถ๋งํฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
-
๋ชจ๋ url์ https:// ๋ก๋ง ์์ํ๋ค.
-
๊ฒ์์ด word๋ ํ๋์ ์์ด ๋จ์ด๋ก๋ง ์ฃผ์ด์ง๋ฉฐ ์ํ๋ฒณ ์๋ฌธ์์ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
-
word์ ๊ธธ์ด๋
1
์ด์12
์ดํ์ด๋ค. -
๊ฒ์์ด๋ฅผ ์ฐพ์ ๋, ๋์๋ฌธ์ ๊ตฌ๋ถ์ ๋ฌด์ํ๊ณ ์ฐพ๋๋ค.
- ์๋ฅผ๋ค์ด ๊ฒ์์ด๊ฐ blind์ผ ๋, HTML ๋ด์ Blind๋ผ๋ ๋จ์ด๊ฐ ์๊ฑฐ๋, BLIND๋ผ๋ ๋จ์ด๊ฐ ์์ผ๋ฉด ๋ ๊ฒฝ์ฐ ๋ชจ๋ ํด๋น๋๋ค.
-
๊ฒ์์ด๋ ๋จ์ด ๋จ์๋ก ๋น๊ตํ๋ฉฐ, ๋จ์ด์ ์์ ํ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ๊ธฐ๋ณธ ์ ์์ ๋ฐ์ํ๋ค.
- ๋จ์ด๋ ์ํ๋ฒณ์ ์ ์ธํ ๋ค๋ฅธ ๋ชจ๋ ๋ฌธ์๋ก ๊ตฌ๋ถํ๋ค.
- ์๋ฅผ๋ค์ด ๊ฒ์์ด๊ฐ aba ์ผ ๋, abab abababa๋ ๋จ์ด ๋จ์๋ก ์ผ์นํ๋๊ฒ ์์ผ๋, ๊ธฐ๋ณธ ์ ์๋ 0์ ์ด ๋๋ค.
- ๋ง์ฝ ๊ฒ์์ด๊ฐ aba ๋ผ๋ฉด, aba@aba aba๋ ๋จ์ด ๋จ์๋ก ์ธ๊ฐ๊ฐ ์ผ์นํ๋ฏ๋ก, ๊ธฐ๋ณธ ์ ์๋ 3์ ์ด๋ค.
-
๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค๋, ๋์ผํ ๋งค์นญ์ ์๋ฅผ ๊ฐ์ง ์นํ์ด์ง๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ์ค index ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ๊ฒ๋ฅผ ๋ฆฌํดํ๋ค
- ์ฆ, ์นํ์ด์ง๊ฐ ์ธ๊ฐ์ด๊ณ , ๊ฐ๊ฐ ๋งค์นญ์ ์๊ฐ 3,1,3 ์ด๋ผ๋ฉด ์ ์ผ ์ ์ index ๋ฒํธ์ธ 0์ ๋ฆฌํดํ๋ฉด ๋๋ค.
์ฝ๋
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
struct WebPage {
int basePoint;
vector<int> linkTo;
int linkNum;
double linkPoint;
double matchingPoint;
WebPage() {
basePoint = 0;
linkPoint = 0;
linkNum = 0;
matchingPoint = 0;
}
};
int solution(string word, vector<string> pages) {
int answer = 0;
vector<WebPage*> webPages;
for (int i = 0; i < pages.size(); i++) {
webPages.push_back(new WebPage());
}
vector<string> address;
transform(word.begin(), word.end(), word.begin(), ::tolower);
for (int i = 0; i < pages.size(); i++) {
string& s = pages[i];
transform(s.begin(), s.end(), s.begin(), ::tolower);
// ํด๋น ์ฌ์ดํธ์ url ์ ์ฅ
int pos = 0, mid = 0, posr;
while (mid <= pos) {
pos = s.find("<meta", pos + 1);
posr = s.find(">", pos);
mid = s.rfind("https://", posr); // >์์ ์ผ์ชฝ์ผ๋ก ์ฐพ๊ธฐ
}
posr = s.find("\"", mid);
string url = s.substr(mid, posr - mid);
address.push_back(url);
// body ๋ด์ ๋ฌธ์์ด ๊ฐฏ์ ์ธก์
pos = s.find("<body>", posr);
int start = pos;
while (1) {
start = s.find(word, start + 1);
if (start == string::npos)
break;
if (!isalpha(s[start - 1]) && !isalpha(s[start + word.size()])) {
webPages[i]->basePoint++;
start += word.size();
}
}
}
for (int i = 0; i<pages.size(); i++) {
string& s = pages[i];
int posl = s.find("<body>");
int mid = posl;
int posr;
while (1) {
posl = s.find("<a href", posl + 1);
if (posl == string::npos)
break;
webPages[i]->linkNum++;
posl = s.find("https://", posl + 1);
posr = s.find(">", posl);
mid = s.rfind("\"", posr);
if (mid <= posl)
continue;
string url = s.substr(posl, mid - posl);
auto location = find(address.begin(), address.end(), url);
if (location == address.end())
continue;
int idx = location - address.begin();
auto linkvec = webPages[i]->linkTo;
if (find(linkvec.begin(), linkvec.end(), idx) == linkvec.end()) // ์๋ idx๋ง ๋ฃ๊ธฐ
webPages[i]->linkTo.push_back(idx);
}
}
for (int i = 0; i < pages.size(); i++) {
for (int j = 0; j < webPages[i]->linkTo.size(); j++) {
int idx = webPages[i]->linkTo[j];
webPages[idx]->linkPoint += (double)webPages[i]->basePoint / (double)webPages[i]->linkNum;
}
}
double maxPoint = 0;
for (int i = 0; i<pages.size(); i++) {
webPages[i]->matchingPoint = webPages[i]->basePoint + webPages[i]->linkPoint;
if (webPages[i]->matchingPoint > maxPoint) {
maxPoint = webPages[i]->matchingPoint;
answer = i;
}
}
return answer;
}
ํ์ด
๋ชจ๋ test case๋ฅผ ํต๊ณผํ ์ ์๋๋ก ํ๊ทธ์ ์์น๋ฅผ ์ ๊ฒ์ํด์ ๊ฐ์ ๋ฝ์๋ด๋ฉด ๋๋ค.
- ์นํ์ด์ง์ meta ํ๊ทธ๋ฅผ ๊ฒ์ฌํ์ฌ ํด๋น ํ์ด์ง์ url์ address vector์ ์ ์ฅํ๋ค.
- ์นํ์ด์ง์ body์์ ์ฃผ์ด์ง word์ ์ผ์นํ๋ ๋จ์ด๊ฐ ์๋์ง ๋จ์ด ๋ณ๋ก ๊ฒ์ฌํ๋ค.
- ์ผ์นํ๋ ๋จ์ด๊ฐ ์์ ์ ํด๋น ๋จ์ด ์ฃผ์์ ์ํ๋ฒณ์ด ์๋ ๋ฌธ์๊ฐ ์์ด์ผ ํต๊ณผ.
- word์ body ๋ชจ๋ ์๋ฌธ์ ํน์ ๋๋ฌธ์๋ก ํต์ผ ์์ผ์ฃผ์ด์ผ ์ฐพ๊ธฐ ์ฝ๋ค.
- ์นํ์ด์ง์ body์์ a ํ๊ทธ๋ฅผ ์ฐพ์์ ํด๋น ํ์ด์ง์ linkNum์ ๊ณ์ฐํด์ค๋ค.
- ์นํ์ด์ง์ body์์ a ํ๊ทธ๋ฅผ ์ฐพ์์ ์ธ๋ถ ๋งํฌ๊ฐ ํฅํ๋ ํ์ด์ง์ linkPoint๋ฅผ ๊ณ์ฐํด์ค๋ค.
- linkPoint๋ ๊ธฐ๋ณธ์ ์์ ๋งํฌ ์๊ฐ ํ์ํ๋ฏ๋ก ๋ฐ๋ก ์ง์ linkNum์ ๊ณ์ฐํด์ฃผ๋ ํ๋ก์ธ์ค์ ํจ๊ป ํํ ์ ์๋ค.
- basePoint์ linkPoint๋ฅผ ๊ฐ์ง๊ณ matchingPoint๋ฅผ ๊ณ์ฐํด์ค๋ค.
- matchingPoint๊ฐ ๊ฐ์ฅ ์์ ์นํ์ด์ง์ index๋ฅผ returnํ๋ค.
- matchingPoint์ ์ต๋๋ฅผ ๊ตฌํ๋ ์์ผ๋ก ๋์ํ์ฌ ์ต๋๊ฐ์ด ๊ฐฑ์ ๋๋ฉด ํด๋น index๋ฅผ answer์ ์ ์ฅ
์ฑ์ ๊ฒฐ๊ณผ
์ฃผ์ ์ฌํญ
8๋ฒ ํ ์คํธ ์ผ์ด์ค๊ฐ ์ ํ์ด์ง๋ ๊ฒฝ์ฐ
- meta tag์์ <> ์ฌ์ด์ https://๊ฐ ๋ค์ด๊ฐ์ง ์๋ ๊ฒฝ์ฐ
- ๋ค๋ฅธ meta tag๋ฅผ ์ฐพ์์ผํ๋ค.
- point ๊ณ์ฐ์ float ํ์ผ๋ก ํ ๊ฒฝ์ฐ
- doubleํ์ผ๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผํ๋ค.
=> 8๋ฒ ํ ์ผ ๋๋ฌธ์ ์ค๋ ๊ฑธ๋ ธ์ง๋ง, ๊ธฐ๋ณธ ๊ตฌํ๋ 2์๊ฐ์ ๊ฑธ๋ ธ๊ณ ๊ฐ์๋ฅผ ์ฐพ์๋ณด๋ ์ฌ๋ฌ ๊ฐํธํ ๋ฌธ๋ฒ์ ๊นจ๋ซ๊ฒ ๋์๋ค.
- find ํจ์์์ 2๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ์์ ์์น๋ฅผ ๋๊ธธ ์ ์๋ค.
- rfind ํจ์๋ ์์ ์์น์์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ฐพ์์ค๋ค.
- transform(์์, ๋, ๊ฒฐ๊ณผ์์, ์ฐ์ฐ ํจ์) ๋ก ์ฝ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
- ์ฐ์ฐํจ์์ ::toupper ๋๋ ::tolower ๋ฅผ ๋ฃ์ผ๋ฉด ๋์๋ฌธ์ ๋ณ๊ฒฝ์ด ์์ํ๋ค.
Comment