์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- ๋ถํ ์ ๋ณต
- ์คํ
- CVE
- c++
- ๊ตฌํ
- dynamic debugging
- JPA
- Reversing
- dfs
- ๋ฐ์ดํฌ์คํธ๋ผ
- web
- Spring
- ์ด๋ถ ํ์
- GCP
- ๋ฌธ์์ด
- OS
- ๋ฐฑํธ๋ํน
- ์ต๋จ ๊ฒฝ๋ก
- ๊ทธ๋ฆฌ๋
- ์์ ์ ๋ ฌ
- ์ฌ๊ท
- ์๋ฎฌ๋ ์ด์
- error
- java
- BFS
- ๋์ ํฉ
- ๋งต
- ์ฐ์ ์์ ํ
- thymeleaf
- DP
- Today
- Total
hades
[Baekjoon] 1509๋ฒ: ํฐ๋ฆฐ๋๋กฌ ๋ถํ ๋ณธ๋ฌธ
๐ฅ ๋ฌธ์
https://www.acmicpc.net/problem/1509
๐ ์ค๊ณ
๋ถ๋ถ ๋ฌธ์์ด๋ค ์ค์์ ์ด๋์๋ถํฐ ์ด๋๊น์ง ํฐ๋ฆฐ๋๋กฌ์ธ์ง ๋จผ์ ๊ตฌํด์ผ ํ๋ค. ํฐ๋ฆฐ๋๋กฌ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฌธ์ ๊ฐ์๊ฐ ํ๋์ธ ๊ฒฝ์ฐ, ํฐ๋ฆฐ๋๋กฌ์ด๋ค.
๋ฌธ์ ๊ฐ์๊ฐ 2๊ฐ์ธ ๊ฒฝ์ฐ, ๋ ๋ฌธ์๊ฐ ๊ฐ์ผ๋ฉด ํฐ๋ฆฐ๋๋กฌ์ด๋ค.
๋ฌธ์ ๊ฐ์๊ฐ 3๊ฐ ์ด์์ธ ๊ฒฝ์ฐ, ๋งจ ์๊ณผ ๋งจ ๋ค๊ฐ ๊ฐ๊ณ , ๊ฐ์ด๋ฐ๊ฐ ํฐ๋ฆฐ๋๋กฌ์ด๋ฉด, ํฐ๋ฆฐ๋๋กฌ์ด๋ค.
์ด์ ํฐ๋ฆฐ๋๋กฌ์ ๊ตฌํ์ผ๋, ์ต์๋ก ๋ถํ ํด์ผ ํ๋ค. ์ต์ ๋ถํ ์๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ด๋ค ์ธ๋ฑ์ค๊น์ง์ ์ต์ ๋ถํ ๊ฐ์๋ฅผ ์ ์ฅํ๋ฉด์, ๊ตฌํ ์ ์๋ค. ์ฃผ์ํด์ผํ ์ ์ ํฐ๋ฆฐ๋๋กฌ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๋ฆฝํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๊ธฐ์กด์ ์ ์ฅ๋ ๊ฐ๊ณผ 0๋ถํฐ end ์ฌ์ด์ ์ธ๋ฑ์ค๋ฅผ start๋ผ๊ณ ํ ๋, start๋ถํฐ end๊น์ง ํฐ๋ฆฐ๋๋กฌ์ด ์ฑ๋ฆฝํ๋ค๋ฉด, end๊น์ง์ ํฐ๋ฆฐ๋๋กฌ ์ต์ ๋ถํ ์๋ ๊ธฐ์กด๊ฐ๊ณผ 0~start-1๊น์ง์ ๋ถํ ์ต์ ์ + 1 ์ค ์ต์๊ฐ์ด๋ค.
๐ ํ์ด
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
string str;
int len;
vector<vector<bool>> palindrome(2500, vector<bool>(2500, false));
vector<int> dp(2500, 1e9 + 7);
void make_palindrome() {
for (int i = 0; i < len; i++) {
palindrome[i][i] = true;
}
for (int i = 0; i < len - 1; i++) {
if (str[i] == str[i + 1]) {
palindrome[i][i + 1] = true;
}
}
for (int diff = 2; diff < len; diff++) {
for (int start = 0; start + diff < len; start++) {
int end = start + diff;
if ((str[start] == str[end]) && palindrome[start + 1][end - 1]) {
palindrome[start][end] = true;
}
}
}
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> str;
len = str.length();
make_palindrome();
for (int end = 0; end < len; end++) {
for (int start = 0; start <= end; start++) {
if (palindrome[start][end] == true) {
if (start == 0) {
dp[end] = 1;
continue;
}
dp[end] = min(dp[end], dp[start - 1] + 1);
}
}
}
cout << dp[len - 1] << "\n";
return 0;
}
'๐ PS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 9527๋ฒ: 1์ ๊ฐ์ ์ธ๊ธฐ (0) | 2024.09.18 |
---|---|
[Baekjoon] 1562๋ฒ: ๊ณ๋จ ์ (0) | 2024.09.16 |
[Baekjoon] 6198๋ฒ: ์ฅ์ ์ ์ ๊พธ๋ฏธ๊ธฐ (0) | 2024.09.13 |
[Baekjoon] 15486๋ฒ: ํด์ฌ 2 (0) | 2024.09.10 |
[Baekjoon] 30805๋ฒ: ์ฌ์ ์ ์ต๋ ๊ณตํต ๋ถ๋ถ ์์ด (0) | 2024.09.09 |