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 |
Tags
- 유니티
- 투 포인터
- 알고리즘
- 우선순위 큐
- 그래프
- XR Interaction Toolkit
- 시뮬레이션
- 구현
- Unreal Engine 5
- 스택
- Team Fortress 2
- 자료구조
- 문자열
- 다익스트라
- 다이나믹 프로그래밍
- ue5
- 백트래킹
- 유니온 파인드
- BFS
- 트리
- DFS
- 백준
- 수학
- VR
- 재귀
- 브루트포스
- 정렬
- c++
- 누적 합
- 그리디 알고리즘
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 |