์ถ์ฒ :
'19 ์นด์นด์ค ์ฝ๋ฉ ํ ์คํธ (C++) - YouTube
www.youtube.com
๋ฌธ์ |
๋งค์นญ ์ ์
ํ๋ ์ฆ ๋ํ๊ต ์กฐ๊ต์๋ ์ ์ด์ง๋ ํ๋๋ ์ผ๋ง ์ํค๋ ๋ค์ค ํ๊ณผ์ฅ๋์ ๋ง์์์ ๋ฒ์ด๋, ์นด์นด์ค์ ์ ์ฌํ๊ฒ ๋์๋ค.
ํ์์ ๊ด์ฌ์์ดํ๋ ๊ฒ์์ ๋ง์นจ ๊ฒฐ์์ด ๋ฐ์ํ์ฌ, ๊ฒ์๊ฐ๋ฐํ์ ํธ์ ๋ ์ ์์๊ณ , ๋๋ง์ ์ฒซ ํ๋ก์ ํธ๋ฅผ ๋งก๊ฒ ๋์๋ค.
๊ทธ ํ๋ก์ ํธ๋ ๊ฒ์์ด์ ๊ฐ์ฅ ์ ๋ง๋ ์นํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์๋์ ๊ฐ์ ๊ท์น์ผ๋ก ๊ฒ์์ด์ ๋ํ ์นํ์ด์ง์ ๋งค์นญ์ ์๋ฅผ ๊ณ์ฐ ํ๋ ๊ฒ์ด์๋ค.
- ํ ์นํ์ด์ง์ ๋ํด์ ๊ธฐ๋ณธ์ ์, ์ธ๋ถ ๋งํฌ ์, ๋งํฌ์ ์, ๊ทธ๋ฆฌ๊ณ ๋งค์นญ์ ์๋ฅผ ๊ตฌํ ์ ์๋ค.
- ํ ์นํ์ด์ง์ ๊ธฐ๋ณธ์ ์๋ ํด๋น ์นํ์ด์ง์ ํ ์คํธ ์ค, ๊ฒ์์ด๊ฐ ๋ฑ์ฅํ๋ ํ์์ด๋ค. (๋์๋ฌธ์ ๋ฌด์)
- ํ ์นํ์ด์ง์ ์ธ๋ถ ๋งํฌ ์๋ ํด๋น ์นํ์ด์ง์์ ๋ค๋ฅธ ์ธ๋ถ ํ์ด์ง๋ก ์ฐ๊ฒฐ๋ ๋งํฌ์ ๊ฐ์์ด๋ค.
- ํ ์นํ์ด์ง์ ๋งํฌ์ ์๋ ํด๋น ์นํ์ด์ง๋ก ๋งํฌ๊ฐ ๊ฑธ๋ฆฐ ๋ค๋ฅธ ์นํ์ด์ง์ ๊ธฐ๋ณธ์ ์ รท ์ธ๋ถ ๋งํฌ ์์ ์ดํฉ์ด๋ค.
- ํ ์นํ์ด์ง์ ๋งค์นญ์ ์๋ ๊ธฐ๋ณธ์ ์์ ๋งํฌ์ ์์ ํฉ์ผ๋ก ๊ณ์ฐํ๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด 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์ <head> ํ๊ทธ ๋ด์ <meta> ํ๊ทธ์ ๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ค.
- ์๋ฅผ๋ค์ด, ์๋์ ๊ฐ์ meta tag๊ฐ ์์ผ๋ฉด ์ด ์นํ์ด์ง์ url์ https://careers.kakao.com/index ์ด๋ค.
- <meta property=og:url content=https://careers.kakao.com/index />
- ํ ์นํ์ด์ง์์ ๋ชจ๋ ์ธ๋ถ ๋งํฌ๋ <a href=https://careers.kakao.com/index>์ ํํ๋ฅผ ๊ฐ์ง๋ค.
- <a> ๋ด์ ๋ค๋ฅธ 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์ ๋ฆฌํดํ๋ฉด ๋๋ค.
์ ์ถ๋ ฅ ์
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 ๋ฌธ์์ด์ด ์์๋๋ก ๋ค์ด์๋ค.
<html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <meta property="og:url" content="https://a.com"/> </head> <body> Blind Lorem Blind ipsum dolor Blind test sit amet, consectetur adipiscing elit. <a href="https://b.com"> Link to b </a> </body> </html> |
<html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <meta property="og:url" content="https://b.com"/> </head> <body> Suspendisse potenti. Vivamus venenatis tellus non turpis bibendum, <a href="https://a.com"> Link to a </a> blind sed congue urna varius. Suspendisse feugiat nisl ligula, quis malesuada felis hendrerit ut. <a href="https://c.com"> Link to c </a> </body> </html> |
<html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <meta property="og:url" content="https://c.com"/> </head> <body> Ut condimentum urna at felis sodales rutrum. Sed dapibus cursus diam, non interdum nulla tempor nec. Phasellus rutrum enim at orci consectetu blind <a href="https://a.com"> Link to a </a> </body> </html> |
์์ ์๋ฅผ ๊ฐ์ง๊ณ ๊ฐ๊ฐ์ ์ ์๋ฅผ ๊ณ์ฐํด๋ณด์.
- ๊ธฐ๋ณธ์ ์ ๋ฐ ์ธ๋ถ ๋งํฌ์๋ ์๋์ ๊ฐ๋ค.
- 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.๊ท์น
- ์นํ์ด์ง์ index๋ pages ๋ฐฐ์ด์ index์ ๊ฐ์ผ๋ฉฐ 0๋ถํฐ ์์ํ๋ค.
- ํ ์นํ์ด์ง์ url์ HTML์ <head> ํ๊ทธ ๋ด์ <meta> ํ๊ทธ์ ๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ค.
- ํ ์นํ์ด์ง์์ ๋ชจ๋ ์ธ๋ถ ๋งํฌ๋ <a href=https://careers.kakao.com/index>์ ํํ๋ฅผ ๊ฐ์ง๋ค.
- ๋ชจ๋ url์ https:// ๋ก๋ง ์์ํ๋ค.
- ๊ฒ์์ด๋ฅผ ์ฐพ์ ๋, ๋์๋ฌธ์ ๊ตฌ๋ถ์ ๋ฌด์ํ๊ณ ์ฐพ๋๋ค.
- ๊ฒ์์ด๋ body์์์ ์ฐพ๋๋ค.
- ๊ฒ์์ด๋ ๋จ์ด ๋จ์๋ก ๋น๊ตํ๋ฉฐ, ๋จ์ด์ ์์ ํ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ๊ธฐ๋ณธ ์ ์์ ๋ฐ์ํ๋ค.
- (์๋ฅผ๋ค์ด ๊ฒ์์ด๊ฐ aba ์ผ ๋, abab abababa๋ ๋จ์ด ๋จ์๋ก ์ผ์นํ๋๊ฒ ์์ผ๋, ๊ธฐ๋ณธ ์ ์๋ 0์ ์ด ๋๋ค.)
- ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค๋, ๋์ผํ ๋งค์นญ์ ์๋ฅผ ๊ฐ์ง ์นํ์ด์ง๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ์ค index ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ๊ฒ๋ฅผ ๋ฆฌํดํ๋ค.
2.์์
(1)๊ตฌ์กฐ์ฒด ์ ์ธ, ๋ฒกํฐ ์ด๊ธฐํ
ํ์ฌ ํ์ด์ง์ ์ธ๋ฑ์ค, ๊ธฐ๋ณธ์ ์, ๋งํฌ์ ์, ๊ทธ๋ฆฌ๊ณ ๋งค์นญ์ ์๋ฅผ ์ ์ฅํ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธํ๊ณ (์ ๋ ์ฌ๊ธฐ์ ์ธ๋ฐ์๋ ๋ณ์๋ค์ ๋๋ฌด ๋ง์ด ์ ์ธํ๋ค๋ ๊ฒ์ ๋ต์ฝ๋ ์์์ ๋ณด๊ณ ์์์ต๋๋ค..)
์ด ๊ตฌ์กฐ์ฒด๋ฅผ ์๋ฃํ์ผ๋ก ๊ฐ๋ ๋ฒกํฐ์, ํน์ url์ด ์ด๋ค ํ์ด์ง์ index๋ฅผ ๊ฐ๋์ง๋ฅผ ์ ์ฅํ๋ ํด์๋งต์ ์ ์ธํฉ๋๋ค.
(2)์๋ฌธ์๋ก ํต์ผ
ํ์์ ์ํด ๊ฒ์์ด์ htmlํ์ด์ง๋ฅผ ์ ๋ถ ์๋ฌธ์๋ก ๋ณํํฉ๋๋ค.
(3)๋ฌธ์์ด, url ,์ธ๋ถ๋งํฌ ํ์
๋ฌธ์์ด์ ์กฐ์ํ์ฌ
๊ฒ์์ด๋ <body>ํ๊ทธ ์์์, ํ์ฌ ํ์ด์ง์ url์ <meta>ํ๊ทธ ์์์, ์ธ๋ถ ๋งํฌ๋ <a href> ํ๊ทธ ์์์ ์ฐพ์ต๋๋ค.
(3)๋งํฌ์ ์์ ๊ธฐ๋ณธ์ ์๋ฅผ ์ด์ฉํด ๋งค์นญ์ ์ ๊ตฌํ๊ธฐ
ํ์ฌ ํ์ด์ง์ ๊ธฐ๋ณธ์ ์+๊ฐ ์ธ๋ถ๋งํฌ์ ๋งํฌ์ ์๋ก ๋งค์นญ์ ์๋ฅผ ๊ตฌํฉ๋๋ค.
(4)์กฐ๊ฑด์ ๋ง๊ฒ ์ถ๋ ฅ
๋งค์นญ์ ์๊ฐ ์ ์ผ ๋์ index๋ฅผ ์ถ๋ ฅํ๋, ๊ฐ์ ์ ์๊ฐ ์๋ค๋ฉด ์ ์ผ ์์ index๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
3.์ฝ๋
#include <string> | |
#include <vector> | |
#include <map> | |
#include <algorithm> | |
using namespace std; | |
struct Page | |
{ | |
int idx; | |
int basic, link; | |
double score; | |
}; | |
bool cmp(Page a, Page b) | |
{ | |
if (a.score == b.score) return a.idx < b.idx; | |
return a.score > b.score; | |
} | |
int solution(string word, vector<string> pages) { | |
int wSize = word.size(); | |
int pSize = pages.size(); | |
map<string, int> pageHash; | |
vector<Page> pageList; | |
transform(word.begin(), word.end(), word.begin(), ::tolower); | |
for (int i = 0; i < pSize; i++){ | |
string &s = pages[i]; | |
transform(s.begin(), s.end(), s.begin(), ::tolower); | |
//meta(url)===========================================// | |
int posMid = 0, posL = 0, posR = 0; | |
while (posMid <= posL){ | |
posL = s.find("<meta", posL + 1); | |
posR = s.find(">", posL); | |
posMid = s.rfind("https://", posR); | |
} | |
posR = s.find("\"", posMid); | |
string url = s.substr(posMid, posR - posMid); | |
//body(๊ฒ์์ด)=======================================// | |
posL = s.find("<body>", posR); | |
int basic = 0; | |
for (int start = posL; ; ){ | |
start = s.find(word, start + 1); | |
if (start == string::npos) break; | |
else{ | |
//์์์ด ๋ฌธ์๋ฉด ์๋จ | |
if (!isalpha(s[start - 1]) && !isalpha(s[start + wSize])){ | |
basic++; | |
start += wSize; | |
} | |
} | |
} | |
//a href(link)=========================================// | |
int link = 0; | |
for (int start = posL; ;){ | |
start = s.find("<a href", start + 1); | |
if (start == string::npos) break; | |
else link++; | |
} | |
pageHash[url] = i; | |
pageList.push_back({i,basic,link,(double)basic}); | |
} | |
//๋งค์นญ์ ์ ๊ณ์ฐ | |
for (int i = 0; i < pSize; i++) | |
{ | |
string &s = pages[i]; | |
for (int posL = 0, posR = 0; ; ) | |
{ | |
posL = s.find("<a href", posR); | |
if (posL == string::npos) break; | |
else | |
{ | |
posL = s.find("https://", posL); | |
posR = s.find("\"", posL); | |
string linkUrl = s.substr(posL, posR - posL); | |
map<string, int>::iterator it = pageHash.find(linkUrl); | |
if (it != pageHash.end()){ | |
pageList[it->second].score += | |
(double)pageList[i].basic / (double)pageList[i].link; | |
} | |
} | |
} | |
} | |
sort(pageList.begin(), pageList.end(), cmp); | |
return pageList.begin()->idx; | |
} |