1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- Dynamic Programming์ ์ ๋ช ํ ๋ฌธ์ ์ธ ํธ์ง ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ์ ์ฌํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐ์ด ๋จ.
- ํธ์ง ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก, ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค์ด์ผ ํ ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ๊ฐ๊ฐ ํ๊ณผ ์ด์ ์ํ๋ฒณ๋ค์ ๋ฐฐ์นํ ํ,
- ๊ฐ์ ๋ฌธ์์ด์ ๋ํด ๋ฐฐ์นํ์ผ๋ฏ๋ก ์ฃผ๋๊ฐ์ ์ ๋ชจ๋ ๋์ด์ ์ถ๊ฐํด์ผํ ์ํ๋ฒณ์ด ์์ผ๋ฏ๋ก ๋ชจ๋ 0์ผ๋ก ์ฑ์ธ ์ ์์
- ๊ทธ๋ฆฌ๊ณ ์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ ํธ์ง๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ๊ฐ์ ์ฑ์๋๊ฐ๋ ๋ฐฉ์์ด ๋ฐ๋๋ก ์๋์ ๋ถํฐ ์ฑ์๋๊ฐ์ผ ํจ
- ๊ฐ์ ์ฑ์ธ ๋ ์กฐ๊ฑด์ ์ ๋ ฅ ๋ฐ์ ๋ฌธ์์ด์ str์ด๋ผ๊ณ ํ์ ๋, str[i] == str[j]๋ผ๋ฉด, ๋์ด์ ์ฑ์ธ ์ํ๋ฒณ์ด ์์ผ๋ฏ๋ก, ํด๋น ์ํ๋ฒณ์ ์ ์ธํ ์์ชฝ์ ์ํ๋ฒณ๋ค์ด ํฐ๋ฆฐ๋๋กฌ์ ์ด๋ฃจ๋ฉด ๋๋ฏ๋ก, ์ผ์ชฝ ์๋ ๋๊ฐ์ ์ ๊ฐ์ ๋ณต์ฌํ๋ฉด ๋๊ณ ,
- str[i]๊ณผ str[j]๊ฐ ๋ค๋ฅด๋ค๋ฉด, ๊ฐ๋ น, str[i] == b์ str[j] == a์ธ ๊ฒฝ์ฐ ba์ a๋ฅผ ๋ถ์ด๊ฑฐ๋ ba์ b๋ฅผ ๋ถ์ด๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ ์ค ์ต์๊ฐ์ ์ ํํด์ผ ํจ
- ๊ทธ ๊ฐ์ ์๋์ ๊ฐ๊ณผ ์ผ์ชฝ ๊ฐ์ ๋น๊ตํ์ฌ ์ต์๊ฐ์ +1 ํด์ค ๊ฐ์ ํ์ฌ ์์น์ ์ ์ฅํ๋ฉด ๋จ
- ๋ฐ๋ผ์, table[i][j] = str์ ํฐ๋ฆฐ๋๋กฌ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์ถ๊ฐํด์ผํ ๋ฌธ์์ ์ต์ ๊ฐ์
- table[i][j] = str[i] == str[j]๋ผ๋ฉด, table[i + 1][j - 1]์ด๊ณ , ์๋๋ผ๋ฉด, min(table[i + 1][j], table[i][j - 1]) + 1์ผ๋ก ์ ํ์์ ์ธ์ธ์ ์๊ณ , ๋ฌธ์์ด์ ๊ธธ์ด 1000์ด ๋ฌธ์ ์ ํฌ๊ธฐ n์ด๋ผ๊ณ ํ๋ค๋ฉด, O(n^2)์ ์๊ฐ๋ณต์ก๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
5. ์ ์ฒด ์ฝ๋
//MARK: - ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ
//MARK: - Framework
import Foundation
//MARK: - Variable
var table: [[Int]] = []
//MARK: - Function
func solution() -> Void {
//MARK: - Input
guard let str: String = readLine() else { return }
table = Array(repeating: Array(repeating: 0, count: str.count), count: str.count)
//MARK: - Process
for i in 0..<str.count {
table[i][i] = 0
}
for i in stride(from: str.count - 1, through: 0, by: -1) {
for j in stride(from: i + 1, to: str.count, by: 1) {
if str[str.index(str.startIndex, offsetBy: i)] == str[str.index(str.startIndex, offsetBy: j)] {
table[i][j] = table[i + 1][j - 1]
} else {
table[i][j] = table[i + 1][j] < table[i][j - 1] ? table[i + 1][j] + 1 : table[i][j - 1] + 1
}
}
}
//MARK: - Output
print(table[0][str.count - 1])
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ๋ฌธ์์ด ์ฌ์ด์ ๊ฑฐ๋ฆฌ (0) | 2022.04.12 |
---|---|
์ฐ์ ๋ถ๋ถ ์ต๋ํฉ L (0) | 2022.04.12 |
์์ ์ฑ์ทจ (0) | 2022.04.12 |
์ ๊ณฑ์์ ํฉ (0) | 2022.04.08 |
์ง์ฌ๊ฐํ๋ฐฐ์น์๊ฒฝ์ฐ์์ (0) | 2022.04.08 |