Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 구현
- 재귀
- 다이나믹 프로그래밍
- 백준
- c++
- 스택
- 자료구조
- 그래프
- 문자열
- BFS
- VR
- Unreal Engine 5
- DFS
- Team Fortress 2
- 투 포인터
- 유니온 파인드
- 다익스트라
- 시뮬레이션
- 백트래킹
- 유니티
- 정렬
- 트리
- 브루트포스
- 우선순위 큐
- 누적 합
- XR Interaction Toolkit
- 알고리즘
- 그리디 알고리즘
- 수학
- ue5
Archives
- Today
- Total
1일1알
백준 1254번 팰린드롬 만들기 C++ 본문

최소한의 알파벳으로 팰린드롬을 만드는 문제이다. (앞에서부터 읽는 것과 뒤에서부터 읽는 것이 같은 문자열)
주어진 문자열을 탐색하는데, 시작 지점을 1씩 늘려가면서 만약 팰린드롬이라면 문자열의 길이에 시작 지점을 더해서 문제를 해결하였다.
그림으로 그려보면

그림을 좀 못 그린 것 같긴 한데 설명을 해보자면, 처음 a와 e는 같지 않으므로 팰린드롬이 될 가능성이 없다. 그래서 시작 지점을 1 늘려준다. 그때 b와 e도 같지 않으므로 또 늘려준다. 이렇게 진행하다가 3번 인덱스 e에 도착했을 때 마지막 e와 같으므로 팰린드롬일 가능성이 있기 때문에 계속 검사를 해준다. 검사를 마쳤을 때 팰린드롬이 맞았기 때문에 문자열의 길이 8과 검사를 시작했던 인덱스 3을 더하면 11이 된다. ( abcefgfe + cba ) -> cba 부분을 더해준 것.
이런 방식을 이용해서 문제를 해결하였다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string str;
cin >> str;
int cnt = 0;
int ans;
while (true) {
int start = cnt;
int end = str.length() - 1;
while (start <= end) {
if (str[start] != str[end]) break;
start++;
end--;
}
if (start > end) {
ans = str.length() + cnt;
break;
}
cnt++;
}
cout << ans;
};
'알고리즘' 카테고리의 다른 글
백준 14225번 부분수열의 합 C++ (1) | 2021.11.16 |
---|---|
백준 17609번 회문 C++ (1) | 2021.11.15 |
백준 2961번 도영이가 만든 맛있는 음식 C++ (0) | 2021.11.13 |
백준 2564번 경비원 C++ (0) | 2021.11.12 |
백준 2589번 보물섬 C++ (0) | 2021.11.11 |