Hello Ocean! ๐ŸŒผ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ๋งค์นญ ์ ์ˆ˜ ๋ณธ๋ฌธ

Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ๋งค์นญ ์ ์ˆ˜

bba_dda 2021. 2. 3. 12:20
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

์ฃผ์–ด์ง„ ๊ฒ€์ƒ‰์–ด์— ๋Œ€ํ•œ ์›น ํŽ˜์ด์ง€์˜ ๋งค์นญ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์„œ, ๋งค์นญ์ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ํฐ ์›น ํŽ˜์ด์ง€์˜ ์ธ๋ฑ์Šค ๊ตฌํ•˜๊ธฐ

๋งŒ์•ฝ ๊ทธ๋Ÿฐ ์›นํŽ˜์ด์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๊ทธ์ค‘ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ๊ตฌํ•˜๊ธฐ

๊ฐ ํŽ˜์ด์ง€๋ณ„๋กœ 4 ๊ฐ€์ง€์˜ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ธฐ๋ณธ ์ ์ˆ˜ : ์›น ํŽ˜์ด์ง€์—์„œ ๊ฒ€์ƒ‰์–ด๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜ (๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ)
  • ์™ธ๋ถ€ ๋งํฌ ์ˆ˜ : ํ•ด๋‹น ํŽ˜์ด์ง€์— ์กด์žฌํ•˜๋Š”, ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๊ฑธ๋ฆฐ ๋งํฌ์˜ ์ˆ˜
  • ๋งํฌ ์ ์ˆ˜ : [ํ•ด๋‹น ํŽ˜์ด์ง€(A)์˜ ๋งํฌ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ ํŽ˜์ด์ง€(B)์˜ ๊ธฐ๋ณธ ์ ์ˆ˜ / B์˜ ์™ธ๋ถ€ ๋งํฌ ์ˆ˜]์˜ ์ดํ•ฉ
  • ๋งค์นญ ์ ์ˆ˜ : ๊ธฐ๋ณธ ์ ์ˆ˜ + ๋งํฌ ์ ์ˆ˜

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด 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์ ์ด ๋œ๋‹ค.

์ œํ•œ์‚ฌํ•ญ

  • pages๋Š” HTML ํ˜•์‹์˜ ์›นํŽ˜์ด์ง€๊ฐ€ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด์ด๊ณ , ๊ธธ์ด๋Š”1์ด์ƒ20์ดํ•˜์ด๋‹ค.
  • ํ•œ ์›นํŽ˜์ด์ง€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š”1์ด์ƒ1,500์ดํ•˜์ด๋‹ค.
  • ์›นํŽ˜์ด์ง€์˜ index๋Š” pages ๋ฐฐ์—ด์˜ index์™€ ๊ฐ™์œผ๋ฉฐ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  • ํ•œ ์›นํŽ˜์ด์ง€์˜ url์€ HTML์˜ํƒœ๊ทธ ๋‚ด์—ํƒœ๊ทธ์˜ ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.
    • ์˜ˆ๋ฅผ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ meta tag๊ฐ€ ์žˆ์œผ๋ฉด ์ด ์›นํŽ˜์ด์ง€์˜ url์€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์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • word : blind
  • pages :
"<html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta charset=\"utf-8\">\n <meta property=\"og:url\" content=\"https://a.com\"/>\n</head> \n<body>\nBlind Lorem Blind ipsum dolor Blind test sit amet, consectetur adipiscing elit. \n<a href=\"https://b.com\"> Link to b </a>\n</body>\n</html>"
"<html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta charset=\"utf-8\">\n <meta property=\"og:url\" content=\"https://b.com\"/>\n</head> \n<body>\nSuspendisse potenti. Vivamus venenatis tellus non turpis bibendum, \n<a href=\"https://a.com\"> Link to a </a>\nblind sed congue urna varius. Suspendisse feugiat nisl ligula, quis malesuada felis hendrerit ut.\n<a href=\"https://c.com\"> Link to c </a>\n</body>\n</html>"
"<html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta charset=\"utf-8\">\n <meta property=\"og:url\" content=\"https://c.com\"/>\n</head> \n<body>\nUt condimentum urna at felis sodales rutrum. Sed dapibus cursus diam, non interdum nulla tempor nec. Phasellus rutrum enim at orci consectetu blind\n<a href=\"https://a.com\"> Link to a </a>\n</body>\n</html>"
  • pages๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐœ์˜ ์›นํŽ˜์ด์ง€์— ํ•ด๋‹นํ•˜๋Š” HTML ๋ฌธ์ž์—ด์ด ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด์žˆ๋‹ค.

Blind Lorem Blind ipsum dolor Blind test sit amet, consectetur adipiscing elit. Link to b

Suspendisse potenti. Vivamus venenatis tellus non turpis bibendum, Link to a blind sed congue urna varius. Suspendisse feugiat nisl ligula, quis malesuada felis hendrerit ut. Link to c

Ut condimentum urna at felis sodales rutrum. Sed dapibus cursus diam, non interdum nulla tempor nec. Phasellus rutrum enim at orci consectetu blind Link to a

์œ„์˜ ์˜ˆ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ๊ฐ์˜ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด์ž.

  • ๊ธฐ๋ณธ์ ์ˆ˜ ๋ฐ ์™ธ๋ถ€ ๋งํฌ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
    • a.com์˜ ๊ธฐ๋ณธ์ ์ˆ˜๋Š” 3, ์™ธ๋ถ€ ๋งํฌ ์ˆ˜๋Š” 1๊ฐœ
    • b.com์˜ ๊ธฐ๋ณธ์ ์ˆ˜๋Š” 1, ์™ธ๋ถ€ ๋งํฌ ์ˆ˜๋Š” 2๊ฐœ
    • c.com์˜ ๊ธฐ๋ณธ์ ์ˆ˜๋Š” 1, ์™ธ๋ถ€ ๋งํฌ ์ˆ˜๋Š” 1๊ฐœ
  • ๋งํฌ์ ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
    • a.com์˜ ๋งํฌ์ ์ˆ˜๋Š” b.com์œผ๋กœ๋ถ€ํ„ฐ 0.5์ , c.com์œผ๋กœ๋ถ€ํ„ฐ 1์ 
    • b.com์˜ ๋งํฌ์ ์ˆ˜๋Š” a.com์œผ๋กœ๋ถ€ํ„ฐ 3์ 
    • c.com์˜ ๋งํฌ์ ์ˆ˜๋Š” b.com์œผ๋กœ๋ถ€ํ„ฐ 0.5์ 
  • ๊ฐ ์›น ํŽ˜์ด์ง€์˜ ๋งค์นญ ์ ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • a.com : 4.5 ์ 
    • b.com : 4 ์ 
    • c.com : 1.5 ์ 

๋”ฐ๋ผ์„œ ๋งค์นญ์ ์ˆ˜๊ฐ€ ์ œ์ผ ๋†’์€ ์ฒซ๋ฒˆ์งธ ์›น ํŽ˜์ด์ง€์˜ index์ธ 0์„ ๋ฆฌํ„ด ํ•˜๋ฉด ๋œ๋‹ค.

ํ’€์ด

  1. pages ๊ธธ์ด๋งŒํผ loop๋ฅผ ๋Œ๋ฉด์„œ,
    1. ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ
    2. ๊ฐ page์˜ url ์ฐพ์•„ ์ €์žฅํ•˜๊ธฐ
    3. ๊ฐ page์˜ ๊ธฐ๋ณธ ์ ์ˆ˜ ๊ณ„์‚ฐ
    4. ๊ฐ page์— ์กด์žฌํ•˜๋Š” ์™ธ๋ถ€ link ์ฐพ์•„ ์ €์žฅํ•ด๋‘๊ธฐ
  2. pages.size() ํฌ๊ธฐ์˜ match_score vector ๋งŒ๋“ค๊ธฐ. -> ์ดˆ๊ธฐ๊ฐ’ : ๊ฐ ํŽ˜์ด์ง€์˜ ๊ธฐ๋ณธ ์ ์ˆ˜(1์—์„œ ๊ณ„์‚ฐ)
  3. pages ๊ธธ์ด๋งŒํผ loop๋ฅผ ๋Œ๋ฉด์„œ,
    1. 1-4์—์„œ ์ฐพ์€ ์™ธ๋ถ€ link ํŽ˜์ด์ง€์—๊ฒŒ, ์ด ํŽ˜์ด์ง€์˜ ๊ธฐ๋ณธ์ ์ˆ˜ ๋‚˜๋ˆ„์–ด์ฃผ๊ธฐ (๊ธฐ๋ณธ ์ ์ˆ˜/์™ธ๋ถ€ ๋งํฌ ์ˆ˜)
  4. match_score์—์„œ ๊ฐ’์ด ๊ฐ€์žฅ ํฐ ์ธ๋ฑ์Šค ์ฐพ์•„ return

์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ

#include <algorithm>
#include <string>
#include <vector>

using namespace std;

bool isAlphabet(char c) { //๊ธฐ๋ณธ์ ์ˆ˜ ๊ณ„์‚ฐ์‹œ ๋‹จ์–ด ํŒŒ์•…์„ ์œ„ํ•œ ํ•จ์ˆ˜
    if (c == -1) //๋งจ ๋ ๋‹จ์–ด์ผ๊ฒฝ์šฐ.. 
        return true;
    if ((c>='A' && c<='Z')||(c>='a' && c<='z'))
        return true;
    else
        return false;
}
int solution(string word, vector<string> pages) {
    int answer = 0;
    vector<int> basic_score(pages.size(), 0);
    vector<string> url(pages.size());
    vector<vector<string>> link(pages.size());
    vector<vector<int>> link_index(pages.size());

    transform(word.begin(), word.end(), word.begin(), ::tolower);
    for (int i = 0;i < pages.size();i++) {
        //๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ 
        transform(pages[i].begin(), pages[i].end(), pages[i].begin(), ::tolower);

        //ํ•ด๋‹น ํŽ˜์ด์ง€์˜ url ์ฐพ๊ธฐ 
        string url_flag = "content=\"";
        int url_start = pages[i].find(url_flag, 0);
        url_start += url_flag.size();
        int url_end = pages[i].find("\"", url_start);
        url[i] = pages[i].substr(url_start, url_end - url_start);

        //๊ธฐ๋ณธ ์ ์ˆ˜ ๊ณ„์‚ฐ 
        int found = pages[i].find(word, 0); //๋ชป ์ฐพ์œผ๋ฉด found=-1
        while (found > 0) {
            char front = pages[i][found - 1];
            char back;
            if (found + word.size() >= pages[i].size())
                back = -100;
            else
                back = pages[i][found + word.size()];
            if (!isAlphabet(front) && !isAlphabet(back))
                basic_score[i]++;
            found = pages[i].find(word, found + word.size());
        }

        //ํ•ด๋‹น ํŽ˜์ด์ง€์— ์กด์žฌํ•˜๋Š” ์™ธ๋ถ€ ๋งํฌ ์ฐพ๊ธฐ 
        string link_flag = "<a href=\"";
        found = pages[i].find(link_flag, 0); //๋ชป ์ฐพ์œผ๋ฉด -1
        while (found > 0) {
            int link_start = found + link_flag.size();
            int link_end = pages[i].find("\">", link_start);
            if (link_end != -1) {
                link[i].push_back(pages[i].substr(link_start, link_end - link_start));
            }
            found = pages[i].find(link_flag, link_end);
        }
    }
    vector<double> match_score(basic_score.begin(),basic_score.end());
    for (int i = 0;i < pages.size();i++) {
        int link_num = link[i].size();
        for (int j = 0;j < link_num;j++) {
            if (find(url.begin(), url.end(), link[i][j]) != url.end()) {
                //ํŽ˜์ด์ง€i์— ์กด์žฌํ•˜๋Š” ์™ธ๋ถ€ ๋งํฌ ํŽ˜์ด์ง€๋“ค์—๊ฒŒ i์˜ ๊ธฐ๋ณธ ์ ์ˆ˜ ๋‚˜๋ˆ„์–ด์ฃผ๊ธฐ 
                int index = distance(url.begin(), find(url.begin(), url.end(), link[i][j]));
                match_score[index] += basic_score[i] / (double)link_num;
                link_index[i].push_back(index);
            }
        }
    }
    answer = max_element(match_score.begin(), match_score.end())- match_score.begin();
    return answer;
}

์ œ์ถœ ๊ฒฐ๊ณผ

์˜ค๋‹ต ์ด์œ 

programmers.co.kr/questions/9548

page์˜ url์„ ์ฐพ์„ ๋•Œ, ์ด์ „์—๋Š” ์•ž์— content=\"๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•˜์—ˆ๋Š”๋ฐ,

์งˆ๋ฌธํ•˜๊ธฐ๋ฅผ ๋ณด๋‹ˆ, ์•ž์— ์ •ํ™•ํžˆ <meta property=\"og:url\" content=\"https://๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ url๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•ด์„œ, ์ด๋ฅผ ์ˆ˜์ •ํ•˜์˜€๋‹ค.

์ •๋‹ต ์ฝ”๋“œ

#include <algorithm>
#include <string>
#include <vector>


using namespace std;

bool isAlphabet(char c) {
    if (c == -1) //๋งจ ๋ ๋‹จ์–ด์ผ๊ฒฝ์šฐ.. 
        return true;
    if ((c>='A' && c<='Z')||(c>='a' && c<='z'))
        return true;
    else
        return false;
}
int solution(string word, vector<string> pages) {
    int answer = 0;
    vector<int> basic_score(pages.size(), 0);
    vector<string> url(pages.size());
    vector<vector<string>> link(pages.size());
    vector<vector<int>> link_index(pages.size());

    transform(word.begin(), word.end(), word.begin(), ::tolower);
    for (int i = 0;i < pages.size();i++) {
        //๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ 
        transform(pages[i].begin(), pages[i].end(), pages[i].begin(), ::tolower);

        //ํ•ด๋‹น ํŽ˜์ด์ง€์˜ url ์ฐพ๊ธฐ 
        string content = "<meta property=\"og:url\" content=\"";
        string url_flag = "<meta property=\"og:url\" content=\"https://";
        int meta = pages[i].find("<meta", 0);
        int url_start = pages[i].find(url_flag, meta);
        url_start += content.size();
        int url_end = pages[i].find("\"", url_start);
        url[i] = pages[i].substr(url_start, url_end - url_start);

        //๊ธฐ๋ณธ ์ ์ˆ˜ ๊ณ„์‚ฐ 
        int found = pages[i].find(word, 0); //๋ชป ์ฐพ์œผ๋ฉด found=-1
        while (found > 0) {
            char front = pages[i][found - 1];
            char back;
            if (found + word.size() >= pages[i].size())
                back = -100;
            else
                back = pages[i][found + word.size()];
            if (!isAlphabet(front) && !isAlphabet(back))
                basic_score[i]++;
            found = pages[i].find(word, found + word.size());
        }

        //ํ•ด๋‹น ํŽ˜์ด์ง€์— ์กด์žฌํ•˜๋Š” ์™ธ๋ถ€ ๋งํฌ ์ฐพ๊ธฐ 
        string link_flag = "<a href=\"";
        found = pages[i].find(link_flag, 0); //๋ชป ์ฐพ์œผ๋ฉด -1
        while (found > 0) {
            int link_start = found + link_flag.size();
            int link_end = pages[i].find("\">", link_start);
            if (link_end != -1) {
                link[i].push_back(pages[i].substr(link_start, link_end - link_start));
            }
            found = pages[i].find(link_flag, link_end);
        }
    }
    vector<double> match_score(basic_score.begin(),basic_score.end());
    for (int i = 0;i < pages.size();i++) {
        int link_num = link[i].size();
        for (int j = 0;j < link_num;j++) {
            if (find(url.begin(), url.end(), link[i][j]) != url.end()) {
                //ํŽ˜์ด์ง€i์— ์กด์žฌํ•˜๋Š” ์™ธ๋ถ€ ๋งํฌ ํŽ˜์ด์ง€๋“ค์—๊ฒŒ i์˜ ๊ธฐ๋ณธ ์ ์ˆ˜ ๋‚˜๋ˆ„์–ด์ฃผ๊ธฐ 
                int index = distance(url.begin(), find(url.begin(), url.end(), link[i][j]));
                match_score[index] += basic_score[i] / (double)link_num;
                link_index[i].push_back(index);
            }
        }
    }
    answer = max_element(match_score.begin(), match_score.end())- match_score.begin();
    return answer;
}

์ œ์ถœ ๊ฒฐ๊ณผ

์ •๋‹ต์€ ๋‚˜์™”์ง€๋งŒ, ์งˆ๋ฌธํ•˜๊ธฐ๋ฅผ ๋ณด๋‹ˆ "์ •๊ทœํ‘œํ˜„์‹" ์‚ฌ์šฉ์„ ์˜๋„ํ•œ ๋ฌธ์ œ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์ฐธ๊ณ 

์ฝ”๋“œ์—์„œ ๋ฌธ์ž๋ฅผ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด transform()๋ฅผ ์ด์šฉํ•˜์˜€๋Š”๋ฐ,
visual studio์—์„œ๋Š” transform(word.begin(), word.end(), word.begin(), tolower); ๊ฐ€ ์ž˜ ๋Œ์•„๊ฐ”๋Š”๋ฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์— ์ œ์ถœํ•˜์ž ์ด ๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค.

transform()๋‚ด์˜ tolower ์•ž์— :: ๋ถ™์ด์ž ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค
(transform(word.begin(), word.end(), word.begin(), ::tolower);)

์ด ์˜ค๋ฅ˜์™€ ::ํ‘œ์‹œ์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด์•˜๋‹ค.

stackoverflow.com/questions/5539249/why-cant-transforms-begin-s-end-s-begin-tolower-be-complied-successfu

์œ„์˜ ๋งํฌ์— ๋”ฐ๋ฅด๋ฉด,
transform(word.begin(), word.end(), word.begin(), [](const unsigned char i){ return tolower(i); });๊ฐ€ ์ •ํ™•ํ•œ ํ‘œํ˜„์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

tolower()๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ overload๋˜์–ด์„œ ์—ฌ๋Ÿฌ๊ฐœ์ค‘์— ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์ธ์ง€๋ฅผ ๋ช…์‹œํ•ด์ฃผ์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ผ๊ณ  ํ•˜๊ณ , 

์•ž์— ::์„ ๋ถ™์ด๊ฑฐ๋‚˜, [](const unsigned char i){ return tolower(i); } ํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ..

 

์‚ฌ์‹ค ์ € ๋งํฌ์—์„œ ์ •ํ™•ํžˆ ๋ฌด์Šจ ์–˜๊ธฐ๋ฅผ ํ•˜๋Š”๊ฑด์ง€ ์•„์ง ๋‹ค ๋ชป์•Œ์•„๋“ค์—ˆ๋‹ค

TO-DO

์ •๊ทœ ํ‘œํ˜„์‹ ๊ณต๋ถ€ํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•