Problem
Solution
ํด๋น ๋ฌธ์ ๋ Hashtable์ ์ด์ฉํด์ ํ์ด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค.
1. ์ด์ค ๋์ ๋๋ฆฌ๋ฅผ ์ด์ฉํด์ ์ง์ ๊ตฐ์ ๋ฐ๋ฅธ ์ธ์ด๋ณ ์ ์๋ฅผ ์ ์ฅํ๋ค.
table์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋๋ ์ค๋๋ค.
0๋ฒ์งธ๋ ์ง์ ๊ตฐ์ ์ด๋ฆ์ด๋ฏ๋ก ํค๊ฐ์ผ๋ก ์ค์ ํด์ค๋๋ค.
์ธ์ด๋ณ๋ก ์ ์๋ฅผ ์ ์ฅํด์ฃผ๋๋ฐ 1๋ฒ์งธ๋ 5,2๋ฒ์งธ๋ 4,3๋ฒ์งธ๋ 3... ์ด๋ฏ๋ก 6 - i๋ก ์ ์๋ฅผ ์ ์ฅํด์ค๋๋ค.
[์ง์ ๊ตฐ:[์ธ์ด:์ ์]] <- ์ด๋ฐ์์ผ๋ก 2์ค ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค์ด ์ ์ฅํด์ค๋๋ค.
func setJobLanguageScore(table:[String]) -> [String:[String:Int]] {
var jobs:[String:[String:Int]] = [:]
table.forEach {
let split = $0.split(separator: " ")
let job = String(split[0])
for (i,lang) in split.enumerated() {
if i == 0 {
jobs[job] = [:]
continue
}
jobs[job]![String(lang)] = 6-i
}
}
return jobs
}
2. ์ง์ ๊ตฐ๋ณ ์ธ์ด ์ ์ * ์ธ์ด์ ํธ๋์ ํฉ์ ๊ตฌํด์ค๋ค.
์์์ ๊ตฌํ ์ง์ ๊ตฐ์ ๋ฐ๋ฅธ ์ธ์ด๋ณ ์ ์ ๋์ ๋๋ฆฌ์ ํค๊ฐ์ ์ธ์ด๋ฅผ ๋ฃ์ด์ค ์ ์๋ฅผ ๊ตฌํด์ค๋๋ค.
๋ง์ฝ ๋์ ๋๋ฆฌ์ ํด๋น ์ธ์ด๊ฐ ์๋ค๋ฉด 0์ ์ด๋ผ๋ ์๋ฏธ์ ๋๋ค.
์ด๋ฐ์์ผ๋ก ๋ชจ๋ ์ธ์ด๋ฅผ ์ํํด ํด๋น ์ ํธ๋์ ์ธ์ด์ ์๋ฅผ ๊ณฑํด์ค ํฉ์ ๊ตฌํด์ค๋๋ค.
func setJobLangaugeScoreAndPreferenceSum(languages:[String],preference:[Int],jobs:[String:[String:Int]]) -> [String:Int] {
var scores:[String:Int] = [:]
for (i,lang) in languages.enumerated() {
for key in jobs.keys {
let jobScore = jobs[key]?[lang] == nil ? 0 : jobs[key]![lang]!
if scores[key] == nil {
scores[key] = preference[i] * jobScore
}else {
scores[key]! += preference[i] * jobScore
}
}
}
return scores
}
3. ๊ฐ์ฅ ์ ์๊ฐ ๋์ ์ง์ ๊ตฐ์ ๊ตฌํ๋ค.
2์์ ๊ตฌํ ์ดํฉ๋ค ์ค ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ์ฐพ์ answer์ ๋ฃ์ด์ค๋๋ค.
์ฌ๋ฌ๊ฐ์ผ ๊ฒฝ์ฐ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ์ฌ ํ๋๋ง ๊ตฌํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฌํ ๋ค ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๊ฐ์ ๊ตฌํด์ค๋๋ค.
func findMaxJob(scores:[String:Int]) -> String {
var answer:[String] = []
let max = scores.values.max()
for score in scores {
if score.value == max {
answer.append(score.key)
}
}
return answer.sorted().first!
}
4. ๊ฐ์ฅ ์ ์๊ฐ ๋์ ์ง์ ๊ตฐ์ ๋ฐํํ๋ค.
func solution(_ table:[String], _ languages:[String], _ preference:[Int]) -> String {
let jobs:[String:[String:Int]] = setJobLanguageScore(table: table)
let scores:[String:Int] = setJobLangaugeScoreAndPreferenceSum(languages: languages, preference: preference, jobs: jobs)
return findMaxJob(scores: scores)
}
Source Code
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] 2020 KAKAO INTERNSHIP ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (0) | 2021.08.31 |
---|---|
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 5์ฃผ์ฐจ ๋ชจ์ ์ฌ์ (0) | 2021.08.30 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค N-Queen (0) | 2021.08.28 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 3์ฃผ์ฐจ ํผ์ฆ ์กฐ๊ฐ ์ฑ์ฐ๊ธฐ (0) | 2021.08.20 |
[Swift] 2020 KAKAO BLIND RECRUITMENT ๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์นํ๊ธฐ (0) | 2021.08.13 |
๋๊ธ