[ํ๋ก๊ทธ๋๋จธ์ค] ์คํฌํธ๋ฆฌ
<๋ฌธ์ >
<์ ๋ต์ง๊ธฐ>
๋จผ์ ์๊ฐํด๋ณธ๊ฑด, skill์ ๊ฐ ์คํฌ ์ฌ์ด์ฌ์ด์ ์๋ฌด๊ฐ์ด๋ ๋ค์ด๊ฐ๋ ์๊ด์๋ ๋น๊ต์๋ฅผ ๋ง๋ค๊ณ ์ถ์๋ค. (%C%B%D%).. ์ด๋ ๊ฒ๋ง ๋น๊ต์๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉด skill trees๋ฅผ ๋น๊ตํด๋ณด๋ฉด ๋ ๊ฒ ๊ฐ์..? ๊ทธ๋ฌ๋ ์ด๋ป๊ฒ ํ๋์ง ๋ชจ๋ฆ ใ ๊ทธ๋์ ํํ ๋ฐฉ๋ฒ์.. skill trees๋ฅผ ํ๋ํ๋ ๋ณด๋ฉด์.. ์ ํด์ง ์ ํ skill์ ๋ฐฐ์ฐ๊ณ ํ๋๊ฑฐ๋? ํ๊ณ ๋ฌผ์ด๋ณด๊ธฐ๋ก ํ๋ค. (๋จผ์ ์ ํ์คํฌ์ ํฌํจ๋ ์คํฌ์ธ์ง? ๋ค์์ ์์ ์ ํ์คํฌ์ ๋ค ๋ฐฐ์ ๋์ง?) ๋ง์ฝ ์ ํ์คํฌ๊ณผ ์๊ด์๋ ์คํฌ์ด๋ผ๋ฉด ํ์ต ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ๊ณ pass ํ ์ ์๋๋ก ํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
<์ฝ๋>
import Foundation
func solution(_ skill:String, _ skill_trees:[String]) -> Int {
var res = 0
for us in skill_trees {
var Askill = Array(skill)
for c in Array(us) {
if skill.contains(c) {
if Askill[0] == c {
Askill.removeFirst()
if Askill.count == 0 || c == us[us.index(before: us.endIndex)] {
res += 1
break
}
} else {
break
}
} else {
if c == us[us.index(before: us.endIndex)] {
res += 1
} else {
continue
}
}
}
}
return res
}
<Lesson Learned>
๋๋ฌด Level1 ์ง๋ฆฌ๋ง ๊ณจ๋ผํธ๋..? ์ถ์ด์ Level2๋ ๊ฐ์ด ํ์ด๋ณด๊ธฐ๋ก ํ๋ค ใ ใ ๊ทธ๋ฌ๋.. ๊ทธ๊ฒฐ๊ณผ ์ฝ๋๋ฅผ ๋ณด๋ผ.. ํต.์ง.์ .๋ถ ๐ ์์งํ ์กฐ๊ฑด์ ํ๋ํ๋ ํ์ธํ์ง ์๊ณ ์ ์ด๋ป๊ฒ ๊ณ์ฐํด์ผ ํ ์ง ๋ชฐ๋๋ค. (์ฌ์ ํ ๋ด ์๊ฐ์ C++ Coding Style์ ๋จธ๋ฌผ๋ฌ ์์....ใ ใ ) ์ด์จ๋ ์ํค๋๋๋ก ํด์ ํต๊ณผ๋ ํ์ง๋ง.. ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๊ณ ๋ ์ฉ~ ํ๊ณ ๊ฐ๋๋ฐ์์ ๋ฐ์ทํด์ ์ฌ๋ ค๋ฌ์ผ๊ฒ ๋ค ใ ใ ๐
func solution(_ skill:String, _ skill_trees:[String]) -> Int {
func available(_ s: String, _ t: String) -> Bool {
let alza = t.filter { s.contains($0) } // ์ด๋ ๊ฒ ํ๋ skill์ ํฌํจ๋ ๊ฒ๋ค๋ง ๋จ๋๋ผ ใ
return s.starts(with: alza) // ์ ํ์คํฌ์์๊ฐ ์ ๋๋ก ๋๊ฒ๋ค๋ง true
}
return skill_trees.map { available(skill, $0) }.filter { $0 }.count
}
์ถ์ : ํ๋ก๊ทธ๋๋จธ์ค ์คํฌํธ๋ฆฌ