Problem
Solution
1. ํ์ด์ง์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค๋ค.
๋ช๋ฒ์งธ ์ธ๋ฑ์ค์ธ์ง,์์ ์ url,์ด ์ ์,์ธ๋ถ ๋งํฌ๋ฅผ ํ๋กํผํฐ๋ก ์ค์ ํด์ค๋๋ค.
struct Page {
var index:Int, url:String,score:Double,externalLinks:[String]
}
2. "<" ๊ธฐ์ค์ผ๋ก page์ ๋ฌธ์์ด์ ์๋ฅธ๋ค.
let tags = page.split(separator: "<")
3. ๋๋ ์ง ํ๊ทธ๋ณ๋ก ์ ๋ณด๋ฅผ ์์๋ธ๋ค.
๋ง์ฝ ์ ๊ธ์๊ฐ meta p(meta property)์ผ ๊ฒฝ์ฐ ์์ ์ url์ ๋ปํ๋ฏ๋ก url์ ์ค์ ํด์ค๋๋ค. (์์ค ์ฝ๋์์ getWebpageURL๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!)
/body์ผ ๊ฒฝ์ฐ body๊ฐ ๋๋ ๊ฒ์ด๋ฏ๋ก ์ ์๋ฅผ ์ธํ ํด์ค๋๋ค.
a href์ผ ๊ฒฝ์ฐ ์ธ๋ถ ๋งํฌ๋ฅผ ๋ปํ๋ฏ๋ก ์ธ๋ถ๋งํฌ๋ฅผ ์ธํ ํด์ค๋๋ค.
body์ผ ๊ฒฝ์ฐ score์ +1์ ํด์ฃผ์ด 0์ผ๋ก ๋ง๋ค์ด์ค๋๋ค.
๊ทธ ์ธ ์ผ ๊ฒฝ์ฐ์ body์์ word๋ฅผ ์ฐพ์๋ด์ด ์ ์์ ์ถ๊ฐํด์ค๋๋ค. (์์ค ์ฝ๋์์ findWordInBody๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!)
var pageInfos:[Page] = []
for (i,page) in pages.enumerated() {
var pageInfo = Page(index:i,url: "", score: 0, externalLinks: [])
let tags = page.split(separator: "<")
var score:Double = -1
for tag in tags {
if String(tag.prefix(6)) == "meta p" {
pageInfo.url = getWebpageURL(tag: String(tag))
}
if String(tag.prefix(5)) == "/body" {
pageInfo.score = score
break
}
if String(tag.prefix(6)) == "a href" {
let url = tag.split(separator: "\"")[1]
pageInfo.externalLinks.append(String(url))
}
if String(tag.prefix(4)) == "body" {
score += 1
}
if score > -1 {
findWordInBody(tag: String(tag), word: word.lowercased(), score: &score)
}
}
pageInfos.append(pageInfo)
}
3. ๋งค์นญ ์ ์๊ฐ ๊ฐ์ฅ ๋์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์๋ธ๋ค.
func getMaxMatchingScoreIndex(pageInfos:inout [Page]) -> Int {
for pageInfo in pageInfos {
for link in pageInfo.externalLinks {
if let index = pageInfos.firstIndex(where: {$0.url == link}) {
pageInfos[index].score += pageInfo.score/Double(pageInfo.externalLinks.count)
}
}
}
return pageInfos.sorted{($0.score) > ($1.score)}.first?.index ?? 0
}
4. ๋งค์นญ ์ ์๊ฐ ๊ฐ์ฅ ๋์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
return getMaxMatchingScoreIndex(pageInfos: &pageInfos)
Source Code
P.S
ํ ์คํธ ์ผ์ด์ค 8๋ฒ๋ง ํ๋ ค์ ์ฐพ์๋ดค๋๋ ์ด ์ ์๋ฅผ Double๋ก ํด์ผํ๋ ๋ฌธ์ ์๋ค...
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ๊ธฐ์ง๊ตญ ์ค์น (0) | 2021.09.10 |
---|---|
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 6์ฃผ์ฐจ ๋ณต์ ์ ๋ ฌํ๊ธฐ (0) | 2021.09.06 |
[Swift] 2020 KAKAO INTERNSHIP ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (0) | 2021.08.31 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 5์ฃผ์ฐจ ๋ชจ์ ์ฌ์ (0) | 2021.08.30 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 4์ฃผ์ฐจ ์ง์ ๊ตฐ ์ถ์ฒํ๊ธฐ (0) | 2021.08.28 |
๋๊ธ