๐ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๋งํฌ
โ๐ป ๋ฌธ์ ํ์ด Github ๋งํฌ
๋ฌธ์ ์ค๋ช
์ฌ์ ์ ์ํ๋ฒณ ๋ชจ์ 'A', 'E', 'I', 'O', 'U'๋ง์ ์ฌ์ฉํ์ฌ ๋ง๋ค ์ ์๋, ๊ธธ์ด 5 ์ดํ์ ๋ชจ๋ ๋จ์ด๊ฐ ์๋ก๋์ด ์์ต๋๋ค. ์ฌ์ ์์ ์ฒซ ๋ฒ์งธ ๋จ์ด๋ "A"์ด๊ณ , ๊ทธ๋ค์์ "AA"์ด๋ฉฐ, ๋ง์ง๋ง ๋จ์ด๋ "UUUUU"์ ๋๋ค.
๋จ์ด ํ๋ word๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด ๋จ์ด๊ฐ ์ฌ์ ์์ ๋ช ๋ฒ์งธ ๋จ์ด์ธ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- word์ ๊ธธ์ด๋ 1 ์ด์ 5 ์ดํ์ ๋๋ค.
- word๋ ์ํ๋ฒณ ๋๋ฌธ์ 'A', 'E', 'I', 'O', 'U'๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
word | result |
"AAAAE" | 6 |
"AAAE" | 10 |
"I" | 1563 |
"EIO" | 1189 |
๋ฌธ์ ํ์ด
๋์ ํ์ด
import Foundation
func solution(_ word:String) -> Int {
let alphabet = ["A","E","I","O","U"]
var count = 0
var isAnswer: Bool = false
func dfs(str: String, num: Int) {
if str != word {
count += 1
}else {
isAnswer = true
}
for w in alphabet {
if num < 5 && !isAnswer {
dfs(str: str+w, num: num+1)
}
}
}
dfs(str: "", num: 0)
return count
}
๋ฌธ์ ์ ํ์ด ์์ ํ์์ด๋ผ๊ณ ํด์.. DFS๋ก ํธ๋ ๊ฑธ ์์๋ค. ์์ ํ์์ด๋ผ๊ณ ์ ํ์์ง ์์๋ค๋ฉด DFS๋ฌธ์ ์ธ์ง ๋ฐ๋ก ๋ ์ค๋ฅด์ง ์์์ ๊ฒ ๊ฐ๋ค. ๋๋ฌ๋๋ฌ “ํผ๋ก๋” ๋ฌธ์ ๋ฅผ ํ์๋ ๊ธฐ์ต์ ๋๋ฌ์ด dfs๋ก ํ๊ธฐ ์์ํ๋ค.
์ฌ์ ๊ณผ ๋์ผํ ๊ฐ์ด ๋์์ ๋์ด์ ๋ฐ๋ณตํ์ง ์์๋ ๋ ๋์ ์กฐ๊ฑด์ ์ ์ฉํ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค. ๊ฐ๋จํ๊ฒ true/false๋ฅผ ๋ฃ์ ์ ์๋ ๋ณ์ํ๋๋ง ์ถ๊ฐํ๋ word์ ๋์ผํ ๊ฐ์ด ๋์์ ๋ ๋์ด์ ์ฌ๊ทํจ์๋ฅผ ๋์ง ์๋๋ก ์ค์ ํ ์ ์์๋ค.
์ฒ์์ str๊ฐ์ [String] ๋ฐฐ์ด๋ก ์ฃผ์๋๋ฐ, ๊ทธ๋ผ joinํ๋ ์๊ฐ๋ ์๊ณ , append๋ ํด์ค์ผํ๋๋ฐ ์์์๋ค๊ฐ appendํ ์๊ฐ ์์ด์ ์ด๋ฅผ String์ผ๋ก ๋ฐ๊พธ์ด ํ์ด์ฃผ์๋ค.